Weitere ähnliche Inhalte Kürzlich hochgeladen (20) Mockfight! FlexMock vs. Mocha1. Mockfight!
FlexMock vs. Mocha
Patrick Reagan
patrick@viget.com
Director, Application Development
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 2. Mockfight! FlexMock vs. Mocha 2
What are Mocks?
“Mock objects are simulated
objects that mimic the behavior of
real objects in controlled ways”
- Wikipedia
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 3. Mockfight! FlexMock vs. Mocha 3
When to Mock?
Use mocks when you want to:
• Control the behavior of internal method calls
• Remove dependence on external systems
• Improve test performance
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 4. Mockfight! FlexMock vs. Mocha 4
Control Behavior
What does this return?
Need to maintain consistency between calls
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 5. Mockfight! FlexMock vs. Mocha 5
Control Behavior
How do we test?
Magic happens
here
Stub the call to Die#rand (using Mocha)
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 6. Mockfight! FlexMock vs. Mocha 6
Remove Dependencies
Example: retrieve response data via HTTP
To test this, we need to mock:
• Call to URI#parse
• Calls to Net::HTTP#new and Net::HTTP#head
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 7. Mockfight! FlexMock vs. Mocha 7
Mockfight!
Expanded example:
• Create class method to check for resource
• Handle errors and redirects
• Iteratively develop functionality while testing
• Examine the differences between libraries
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 8. Mockfight! FlexMock vs. Mocha 8
Round 1
Test scenario when URI#parse raises exception
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 9. Mockfight! FlexMock vs. Mocha 9
Round 1: Results
FlexMock
Mocha
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 10. Mockfight! FlexMock vs. Mocha 10
Round 2
Check for a valid response
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 11. Mockfight! FlexMock vs. Mocha 11
Round 2: Results
FlexMock
Mocha
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 12. Mockfight! FlexMock vs. Mocha 12
Round 3
Check for response type instead of status code
* Our previous tests for response status code are now invalid
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 13. Mockfight! FlexMock vs. Mocha 13
Round 3: Results
FlexMock
Mocha
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 14. Mockfight! FlexMock vs. Mocha 14
Round 4
Follow an HTTP redirect response
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 15. Mockfight! FlexMock vs. Mocha 15
Round 4: Results
FlexMock
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 16. Mockfight! FlexMock vs. Mocha 16
Round 4: Results
Mocha
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 17. Mockfight! FlexMock vs. Mocha 17
Round 5
Handling maximum number of redirects
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 18. Mockfight! FlexMock vs. Mocha 18
Round 5: Results
FlexMock
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 19. Mockfight! FlexMock vs. Mocha 19
Round 5: Results
Mocha
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 20. Mockfight! FlexMock vs. Mocha 20
Bonus Round
Mocking ActiveRecord#find in controllers
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 21. Mockfight! FlexMock vs. Mocha 21
Bonus Round: Results
FlexMock
Mocha
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 22. Mockfight! FlexMock vs. Mocha 22
But Wait, There’s More
Mocha has parameter matchers (in SVN)
You can write code like this:
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 23. Mockfight! FlexMock vs. Mocha 23
Conclusion
• Newest versions of gems contain similar features
• FlexMock can accept blocks for further mocking
• Personal preference of syntax is the deciding factor
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 24. Mockfight! FlexMock vs. Mocha 24
It’s a Tie!
Ultimately, two great libraries - just pick one
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 25. Mockfight! FlexMock vs. Mocha 25
Questions?
???
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com 26. Mockfight! FlexMock vs. Mocha 26
Additional Information
FlexMock (Jim Weirich)
http://www.onestepback.org/software/flexmock
Mocha (James Mead)
http://mocha.rubyforge.org
http://www.slideshare.net/viget
Viget Labs
we build web business
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com