Mockfight! FlexMock vs. Mocha

Post on 12-May-2015

10.573 views 1 download

Tags:

description

Patrick Reagan runs through a quick demo using both FlexMock and Mocha to highlight the differences (and similarities!) between the two libraries.

Transcript of Mockfight! FlexMock vs. Mocha

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

Viget Labswe build web business

Mockfight!FlexMock vs. MochaPatrick Reaganpatrick@viget.comDirector, Application Development

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

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:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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:

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

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

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

Viget Labswe build web business

Mockfight! FlexMock vs. Mocha

Questions?

25

???

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