mockfight! flexmock vs. mocha

26
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com Viget Labs we build web business Mockfight! FlexMock vs. Mocha Patrick Reagan [email protected] Director, Application Development

Upload: patrick-reagan

Post on 12-May-2015

754 views

Category:

Technology


1 download

DESCRIPTION

Patrick compares 2 popular mocking libraries based on the features they provide and the API that each exposes to developers.

TRANSCRIPT

Page 1: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight!FlexMock vs. MochaPatrick [email protected], Application Development

Page 2: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

“Mock objects are simulated objects that mimic the behavior of real objects in controlled ways”

- Wikipedia

What are Mocks?

2

“Mock objects are simulated objects that mimic the behavior of real objects in controlled ways”

- Wikipedia

Page 3: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

When to Mock?

• Control the behavior of internal method calls

• Remove dependence on external systems

• Improve test performance

3

Use mocks when you want to:

Page 4: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Control Behavior

4

What does this return?

Need to maintain consistency between calls

Page 5: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Control Behavior

5

How do we test?

Stub the call to Die#rand (using Mocha)

Magic happens here

Page 6: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Remove Dependencies

Example: retrieve response data via HTTP

6

To test this, we need to mock:• Call to URI#parse• Calls to Net::HTTP#new and Net::HTTP#head

Page 7: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Mockfight!

Expanded example:

• Create class method to check for resource

• Handle errors and redirects

• Iteratively develop functionality while testing

• Examine the differences between libraries

7

Page 8: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 1

8

Test scenario when URI#parse raises exception

Page 9: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 1: Results

9

FlexMock

Mocha

Page 10: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 2

10

Check for a valid response

Page 11: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 2: Results

11

FlexMock

Mocha

Page 12: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 3

12

Check for response type instead of status code

* Our previous tests for response status code are now invalid

Page 13: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 3: Results

13

FlexMock

Mocha

Page 14: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 4

14

Follow an HTTP redirect response

Page 15: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 4: Results

15

FlexMock

Page 16: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 4: Results

16

Mocha

Page 17: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 5

17

Handling maximum number of redirects

Page 18: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 5: Results

18

FlexMock

Page 19: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Round 5: Results

19

Mocha

Page 20: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Bonus Round

20

Mocking ActiveRecord#find in controllers

Page 21: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Bonus Round: Results

21

Mocha

FlexMock

Page 22: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

But Wait, There’s More

22

Mocha has parameter matchers (in SVN)You can write code like this:

Page 23: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Conclusion

23

• Newest versions of gems contain similar features

• FlexMock can accept blocks for further mocking

• Personal preference of syntax is the deciding factor

Page 24: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

It’s a Tie!

24

Ultimately, two great libraries - just pick one

Page 25: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Questions?

25

???

Page 26: Mockfight! FlexMock vs. Mocha

July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Additional Information

26

FlexMock (Jim Weirich)http://www.onestepback.org/software/flexmock

Mocha (James Mead)http://mocha.rubyforge.org

http://www.slideshare.net/viget