mockfight! flexmock vs. mocha
DESCRIPTION
Patrick Reagan runs through a quick demo using both FlexMock and Mocha to highlight the differences (and similarities!) between the two libraries.TRANSCRIPT
![Page 1: Mockfight! FlexMock vs. Mocha](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/1.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/2.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/3.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/4.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/5.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/6.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/7.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/8.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/9.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/10.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/11.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/12.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/13.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/14.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/15.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/16.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/17.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/18.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/19.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/20.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/21.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/22.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/23.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/24.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/25.jpg)
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](https://reader033.vdocuments.us/reader033/viewer/2022052619/55516f3eb4c905723b8b4b43/html5/thumbnails/26.jpg)
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