Date post: | 12-May-2015 |
Category: |
Business |
Upload: | viget-labs |
View: | 10,569 times |
Download: | 1 times |
July 18, 2007 © Copyright 2007 Viget Labs, LLC – www.viget.com
Viget Labswe build web business
Mockfight!FlexMock vs. MochaPatrick [email protected], 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