scaffolding with jmock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/scaffolding...
TRANSCRIPT
![Page 1: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/1.jpg)
Sca!olding with JMock
Course of Software Engineering IIA.A. 2011/2012
Valerio Maggio, PhD StudentProf. Marco Faella
![Page 2: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/2.jpg)
Outline
‣ Brief Recap
-Unit Testing
-JUnit (case study)
‣ Test Sca!olding
-Stubs
-Mocks
‣JMock
-Working Example
2
![Page 3: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/3.jpg)
Example Scenario
‣(… not properly related to Computer Science :)
‣Please, imagine that you have to test a building•Test if it has been constructed properly
•Test if it is able to resist to earthquake
•….
‣ Q: What types of “testing” would you do?
‣ Q: What should be the “starting point”?•Make an educated guess
3
![Page 4: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/4.jpg)
Unit Testing
‣Testing of the smallest pieces of a program•Individual functions or methods
‣Keyword: Unit•(def) Something is a unit if it there's no meaningful
way to divide it up further
‣Buzz Word:•Testing in isolation
4
![Page 5: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/5.jpg)
Unit Testing (cont.)
‣Unit test are used to test a single unit in isolation•Verifying that it works as expected
•No matter the rest of the program would do
‣Possible advantages ?•(Possibly) No inheritance of bugs of mistakes from
made elsewhere
•Narrow down on the actual problem
5
![Page 6: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/6.jpg)
Unit Testing (cont.)
‣Is it enough ?•Not by itself, but...
•… it is the foundation upon which everything is based!
‣(Back to the example)•You can't build a house without solid materials.
•You can't build a program without units that works as expected.
6
![Page 7: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/7.jpg)
7Testing RoadMap
![Page 8: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/8.jpg)
Functional Software Testing
‣Examine code at the boundary of its public API•Testing application Use Cases
‣Developers often combine Functional and Integration Testing
‣Testing•Frameworks (API)
•GUIs
•Subsystems (API call enforced)
8
![Page 9: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/9.jpg)
Integration Software Testing
‣What happens when di!erent units of works are combined together ?
‣Examine the interactions among and writing components:•Objects
•Services
•Subsystems
9
![Page 10: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/10.jpg)
Unit Software Testing
‣Examine the code of a single module in all of its features
‣Starts from the inspection of a simple (small) functionality
‣Writing more and more tests means more and more “manifold” test cases•Three types of unit testing
10
![Page 11: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/11.jpg)
Three types of unit tests
11
![Page 12: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/12.jpg)
Unit Testing main features
‣Greater code coverage percentage•Functional Testing coverage about 70%
•Enable code coverage and other metrics
‣Increase team productivity
‣Improve implementation•Con"dence with refactoring
‣Document expected behavior
12
![Page 13: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/13.jpg)
Test Sca!olding
Programming today is a race between software engineers striving to build bigger and better idiot-proof programs, and the Universe trying to produce bigger and better idiots. So far, the Universe is winning.
Cit. Rich Cook
![Page 14: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/14.jpg)
Integration Testing Example
14
![Page 15: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/15.jpg)
Integration Testing Example
14
![Page 16: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/16.jpg)
Integration Testing Example
14
![Page 17: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/17.jpg)
Integration Testing Example
14
![Page 18: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/18.jpg)
Integration testing problem
‣Integrate multiple components implies to decide in which order classes and subsystems should be integrated and tested
‣CITO Problem•Class Integration Testing Order Problem
‣Solution:•Topological sort of dependency graph
15
![Page 19: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/19.jpg)
Integration testing example16
![Page 20: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/20.jpg)
Integration testing example16
![Page 21: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/21.jpg)
Testing in isolation
‣Testing in isolation o!ers strong bene"ts•Test code that have not been written
•Test only a single method (behavior) without side e!ects from other objects
‣Solutions ?•Stubs
•Mocks
•…
17
![Page 22: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/22.jpg)
Testing in Isolation: example18
![Page 23: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/23.jpg)
Solution with stubs
19
![Page 24: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/24.jpg)
Solution with (Pseudo) Mocks
20
![Page 25: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/25.jpg)
Key Ideas
‣Wrap all the details of Code• (sort of) Simulation
‣Mocks do not provide our own implementation of the components we'd like to swap in
‣Main Di!erence:•Mocks test behavior and interactions between
components
•Stubs replace heavyweight process that are not relevant to a particular test with simple implementations
21
![Page 26: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/26.jpg)
Mock Objects Observations
‣Powerful way to implement Behavior Veri"cation •while avoiding Test Code Duplication between similar
tests.
‣It works by delegating the job of verifying the indirect outputs of the SUT
‣Important Note: Design for Mockability•Dependency Injection Pattern
22
![Page 27: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/27.jpg)
Naming Confusion
‣Unfortunately, while two components are quite distinct, they're used interchangeably.•Example: spring-mock package
‣If we were to be stricter in terms of naming, stub objects de"ned previously are test doubles
‣Test Doubles, Stubs, Mocks, Fake Objects… how we can work it out ?
23
![Page 28: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/28.jpg)
Test Double Pattern (a.k.a. Imposter)
Q: How can we verify logic independently when code it depends on is unusable?Q1: How we can avoid slow tests ?
A: We replace a component on which the SUT depends with a “test-speci"c equivalent.”
24
![Page 29: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/29.jpg)
Test Stub Pattern
Q: How can we verify logic independently when it depends on indirect inputs from other software components ?
A: We replace a real objects with a test-speci"c object that feeds the desired inputs into the SUT
25
![Page 30: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/30.jpg)
Mocks Objects
Q: How can we implement Behavior Veri"cation for indirect outputs of the SUT ?
A: We replace an object on which the SUT depends on with a test-speci"c object that veri"es it is being used correctly by the SUT.
26
![Page 31: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/31.jpg)
Design for Mockability
‣Dependency Injection
27
![Page 32: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/32.jpg)
Dependency injection issues?
Too Many Dependencies......Ideas??28
![Page 33: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/33.jpg)
Dependency injection issues?
Dependency injection for mockability29
![Page 34: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/34.jpg)
Mock Libraries
‣Two main design philosophy:•DSL Libraries
•Record/Replay Models Libraries
‣Record Replay Frameworks•First train mocks and then verify expectations
‣DSL Frameworks•Domain Speci"c Languages
•Speci"cations embedded in “Java” Code
30
![Page 35: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/35.jpg)
Mocking with EasyMock
31
![Page 36: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/36.jpg)
EasyMock Test
‣Create Mock objects•Java Re#ections API
‣Record Expectation•expect methods
‣Invoke Primary Test•replay method
‣Verify Expectation•verify method
32
![Page 37: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/37.jpg)
JMock Example
33
![Page 38: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/38.jpg)
JMock features (intro)
‣JMock previous versions required subclassing•Not so smart in testing
•Now directly integrated with Junit4
•JMock tests requires more typing
‣JMock API is extensible
34
![Page 39: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/39.jpg)
JMock features
‣JMock syntax relies heavily on chained method calls•Sometimes di$cult to decipher and to debug
‣Common Patterns:invocation-count(mockobject).method(arguments);inSequence(sequence-name);when(state-machine.is(state-name));will(action);then(state-machine.is(new-state name));
35
![Page 40: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/40.jpg)
JMock Example
36
![Page 41: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/41.jpg)
37
1. Test Fixture
▶Mockery represents the context
l Neighboring objects it will communicate withl By convention the mockery is stored in an istance
variable named context▶@RunWith(JMock.class) annotation
▶JUnit4Mockery reports expectation failures as JUnit4 test failures
![Page 42: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/42.jpg)
38
2. Create Mock Objects
▶The tests has two mock turtlesl The "rst is a "eld in the test classl The second is local to the test
▶References ("elds and Vars) have to be finall Accessible from Anonymous Expectations
▶The second mock has a speci"ed name
l JMock enforces usage of names except for the "rst (default)
l This makes failures reporting more clear
![Page 43: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/43.jpg)
39
3. Tests with Expectations
▶A test sets up it expectations in one or more expectation blocks
l An expectation block can contain any number of expectations
l Expectation blocks can be interleaved with calls to the code under test.
![Page 44: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/44.jpg)
40
3. Tests with Expectations
▶Expectations have the following structure:
invocation-count (mockobject).method(arguments);
inSequence(sequence-name);when(state-machine.is(state-name));will(action);then(state-machine.is(new-state name));
![Page 45: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/45.jpg)
41What are those double braces?
context.checking(new Expectations(){{ oneOf(turtle).turn(45); }});
▶Anonymous subclass of Expectations▶Baroque structure to provide a scope for building up
expectationsl Collection of expectation componentsl Is an example of Builder Patternl Improves code completion
![Page 46: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/46.jpg)
42What are those double braces?
context.checking(new Expectations(){{ oneOf(turtle).turn(45); }});
![Page 47: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/47.jpg)
43
context.checking(new Expectations(){{ ignoring (turtle2); allowing (turtle).flashLEDs(); oneOf(turtle).turn(45); }});
▶ Expectations describe the interactions that are essential to the protocol we're testing
▶ Allowances support the interaction we're testingl ignoring() clause says that we don't care about messages
sent to turtle2l allowing() clause matches any call to flashLEDs ofturtle
Allowances and Expectations
![Page 48: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/48.jpg)
context.checking(new Expectations(){{
ignoring (turtle2); allowing (turtle).flashLEDs(); oneOf(turtle).turn(45); }});
‣Distinction between allowances and expectations is not rigid
‣Rule of Thumb:•Allow queries; Expect Commands
‣Why?•Commands could have side e!ects;
•Queries don't change the world.
Allowances and Expectations44
![Page 49: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/49.jpg)
Too Many Expectations......Ideas??45
Expectations or … ?
![Page 50: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/50.jpg)
46
Expectations or … ?Too Many Expectations......Ideas??
![Page 51: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/51.jpg)
Expectations or … ?
47
Too Many Expectations......Ideas??
![Page 52: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/52.jpg)
48Development process
‣Let's think about the development process of this example:
Code Test Refactoring
▶Q: Does make sense to write tests before writing production code?
▶A: Two Keywords○ TDD: Test Driven Development○ Test-!rst Programming
![Page 53: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/53.jpg)
48Development process
‣Let's think about the development process of this example:
Code Test RefactoringTest ??
▶Q: Does make sense to write tests before writing production code?
▶A: Two Keywords○ TDD: Test Driven Development○ Test-!rst Programming
![Page 54: Scaffolding with JMock - unina.itwpage.unina.it/valerio.maggio/teaching/1112/softeng2/Scaffolding wi… · Example Scenario ‣(… not properly related to Computer Science :) ‣Please,](https://reader033.vdocuments.us/reader033/viewer/2022052801/5f125f9a4c91a658244748fa/html5/thumbnails/54.jpg)
49
References
Growing Object-Oriented Software, Guided By TestsFreeman and Pryce, Addison Wesley 2010
JMock Project WebSite(http://jmock.org)