test du futur avec spock
Post on 16-Apr-2017
2.161 Views
Preview:
TRANSCRIPT
Prsentation PowerPoint
LEMEE MathildeIndpendanteEmail : mathilde@java-freelance.frTwitter : @MathildeLemeeLinkedIn : http://fr.linkedin.com/in/MathildeLemeeBlog : http://www.java-freelance.frTests du futur avec Spock
Problmatique
Spock
Pas que du mockTest full stack
def "stack should push"(){
given:
def stack = new Stack();
def elem = "push me"
when:
stack.push(elem)
then:
!stack.empty
stack.size() == 1
stack.peek() == elem
}
Exemple 1
Map dummyData;
public UserService() {
dummyData = new HashMap();
dummyData.put("user1", new User("John", "Doe", 123456));
dummyData.put("user2", new User("Jane", "Doe", 654321));
dummyData.put("user3", new User("John", "Smith", 789987));}
public User get(String username) {
return dummyData.get(username);}
Pour les prochains slides voil la mthode sur laquelle nous allons nous appuyer
public void userShouldBeWellFilled() {
given:
UserService service = new UserService()
when:
User user = service.get("user1")
then:
user.firstName == 'John'
user.lastName == 'Doe'
user.id == 123456}
}
Exemple 2 simple
Blocs
given = setup
when then ou expect
where
cleanup
when:
def x = Math.max(1, 2)
then:
x == 2
expect:
Math.max(1, 2) == 2
Equivalent Spock - jUnit
setup() @Before
cleanup() @After
setupSpec() @BeforeClass
cleanupSpec() @AfterClass
setup
SecurityService securityService;
UserService service;
def setup() {
securityService = Mock(SecurityService)
service = new UserService()
service.securityService = securityService
}
Rappel
Stub = Bouchon = Stupide
=> Test d'tat
Mock = Simulacre = Intelligent
=> Test comportement
public User getManager(String username) {
User manager = securityService.getManager(username);
if (manager == null) {
manager = dummyData.get("user1");
}
return manager;
}
+ Spock
securityService.getManager("user2")>>new User(firstName: "John", lastName: "Smith", id: 789986)
securityService.getManager("user2")
>>>[new User("John"),new User("J")]
Stub
given:
securityService.getManager("user2")>>new User("John", "Smith",789986)
when:
User manager = service.getManager("user2")
then:
manager.id==789986
Interaction
mock.receive()
mock.receive(_)
mock.receive(!null)
mock.receive(event)
mock.receive(!event)
mock.receive(_ as Message)
mock./set.*/(_)
def "getManager should securityService.getManager"() {
when:
service.getManager "user1"
then:
1*securityService.getManager (_)
Cardinalit
1 *
(n.._)
(_..n)
0 * _
Argument Matcher
public Boolean auditByUser(String username) {
User user = dummyData.get(username);
return securityService.hasAccess(user);
}
@Test
public void testArgumentMatcher() {
userService.auditByUser("user1");
verify(securityService).hasAccess(argThat(new isUserId123456()));
}
class isUserId123456 extends ArgumentMatcher {
public boolean matches(Object object) {
return ((User) object).getId() == 123456;
}}
when:
service.auditByUser("user1")
then:
1*securityService.hasAccess {it.id==123456}
}
Exceptions
@Test(expected = RuntimeException.class)
public void testRuntimeExceptionShouldNotBeCatch() {
when(userService.getManager("user1")).thenThrow(new RuntimeException());
userService.getManager("user1");
}
securityService.getManager("user2")>>{throw new RuntimeException()}
when:
service.getManager("user2")
then:
thrown(RuntimeException)
Exceptions
>> {throw }
thrown / notThrown
@FailsWith
Data Driven Testing
def "user should be well filed"() {
setup:
User service = new UserService()
expect:
User user = service.get(username)
user.firstName == firstname
user.id == userID
where:
username
top related