From d2ec1e5d1fdf07f6b09f95a0e66bbfdccd013454 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 4 Jun 2016 14:32:46 +0200 Subject: [PATCH 01/57] Add new module for mocks comparison. --- mock-comparisons/README.md | 7 ++++ mock-comparisons/pom.xml | 81 ++++++++++++++++++++++++++++++++++++++ pom.xml | 1 + 3 files changed, 89 insertions(+) create mode 100644 mock-comparisons/README.md create mode 100644 mock-comparisons/pom.xml diff --git a/mock-comparisons/README.md b/mock-comparisons/README.md new file mode 100644 index 000000000000..7795487b7700 --- /dev/null +++ b/mock-comparisons/README.md @@ -0,0 +1,7 @@ +========= + +## Mock comparison realated tutorials + + +### Relevant Articles: +- [Mockito vs EasyMock vs JMockit](http://www.baeldung.com/mockito-vs-easymock-vs-jmockit) diff --git a/mock-comparisons/pom.xml b/mock-comparisons/pom.xml new file mode 100644 index 000000000000..9d4a72ee5bc1 --- /dev/null +++ b/mock-comparisons/pom.xml @@ -0,0 +1,81 @@ + + 4.0.0 + org.baeldung + mock-comparisons + 0.1-SNAPSHOT + + mockito + + + + + + + + + + + junit + junit + ${junit.version} + test + + + + + + mock-comparisons + + + src/main/resources + true + + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.7 + 1.7 + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + + + + + + + + + + + + + + + 4.12 + + + 3.3 + 2.6 + 2.18.1 + 2.7 + 1.4.14 + + + + \ No newline at end of file diff --git a/pom.xml b/pom.xml index 6f6326924894..664ac456be52 100644 --- a/pom.xml +++ b/pom.xml @@ -22,6 +22,7 @@ javaxval json-path mockito + mock-comparisons querydsl From 49b54130b4902cfc60960ed158d77946150ae3b5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 4 Jun 2016 14:36:27 +0200 Subject: [PATCH 02/57] Add sources for testing. --- .../mocks/testCase/LoginController.java | 28 +++++++++++++++++++ .../org/baeldung/mocks/testCase/LoginDao.java | 9 ++++++ .../baeldung/mocks/testCase/LoginService.java | 21 ++++++++++++++ .../org/baeldung/mocks/testCase/UserForm.java | 10 +++++++ 4 files changed, 68 insertions(+) create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java create mode 100644 mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java new file mode 100644 index 000000000000..577f77e986cf --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java @@ -0,0 +1,28 @@ +package org.baeldung.mocks.testCase; + +public class LoginController { + + private LoginService loginService; + + public String login(UserForm userForm){ + if(null == userForm){ + return "ERROR"; + }else{ + boolean logged = false; + + try { + logged = loginService.login(userForm); + } catch (Exception e) { + return "ERROR"; + } + + if(logged){ + return "OK "; + }else{ + return "KO"; + } + } + } + + // standard setters and getters +} diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java new file mode 100644 index 000000000000..4641fc18896e --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java @@ -0,0 +1,9 @@ +package org.baeldung.mocks.testCase; + +public class LoginDao { + + public int login(UserForm userForm){ + //actual call to a third party library + return 0; + } +} diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java new file mode 100644 index 000000000000..af6d496af9ac --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java @@ -0,0 +1,21 @@ +package org.baeldung.mocks.testCase; + +public class LoginService { + + private LoginDao loginDao; + + public boolean login(UserForm userForm) { + assert null != userForm; + + int loginResults = loginDao.login(userForm); + + switch (loginResults){ + case 1: + return true; + default: + return false; + } + } + + // standard setters and getters +} diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java new file mode 100644 index 000000000000..858c85d1b546 --- /dev/null +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java @@ -0,0 +1,10 @@ +package org.baeldung.mocks.testCase; + +public class UserForm { + + private String username; + + private String password; + + // standard setters and getters +} From 3b0464106205f6a24e02f60f3f9d122c527c7253 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 4 Jun 2016 16:44:46 +0200 Subject: [PATCH 03/57] Changes on testCase. --- .../java/org/baeldung/mocks/testCase/LoginController.java | 3 ++- .../java/org/baeldung/mocks/testCase/LoginService.java | 8 ++++++++ .../main/java/org/baeldung/mocks/testCase/UserForm.java | 7 ++++--- 3 files changed, 14 insertions(+), 4 deletions(-) diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java index 577f77e986cf..16f0b3da591c 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java @@ -8,7 +8,7 @@ public String login(UserForm userForm){ if(null == userForm){ return "ERROR"; }else{ - boolean logged = false; + boolean logged; try { logged = loginService.login(userForm); @@ -17,6 +17,7 @@ public String login(UserForm userForm){ } if(logged){ + loginService.setCurrentUser(userForm.username); return "OK "; }else{ return "KO"; diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java index af6d496af9ac..c6192e3a2055 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java @@ -4,6 +4,8 @@ public class LoginService { private LoginDao loginDao; + private String currentUser; + public boolean login(UserForm userForm) { assert null != userForm; @@ -17,5 +19,11 @@ public boolean login(UserForm userForm) { } } + public void setCurrentUser(String username) { + if(null != username){ + this.currentUser = username; + } + } + // standard setters and getters } diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java index 858c85d1b546..1af9bc7b1294 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java @@ -2,9 +2,10 @@ public class UserForm { - private String username; + // public access modifiers as only for testing - private String password; + public String password; + + public String username; - // standard setters and getters } From b6fdbccdbf621fa04c9e472124fa77ebc449c074 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 4 Jun 2016 16:51:18 +0200 Subject: [PATCH 04/57] Enter some tests for mockito. --- mock-comparisons/pom.xml | 8 ++++ .../mocks/mockito/LoginControllerTest.java | 41 +++++++++++++++++++ 2 files changed, 49 insertions(+) create mode 100644 mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java diff --git a/mock-comparisons/pom.xml b/mock-comparisons/pom.xml index 9d4a72ee5bc1..4582e7ebe81f 100644 --- a/mock-comparisons/pom.xml +++ b/mock-comparisons/pom.xml @@ -22,6 +22,13 @@ test + + org.mockito + mockito-core + ${mockito.version} + test + + @@ -68,6 +75,7 @@ 4.12 + 1.10.19 3.3 diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java new file mode 100644 index 000000000000..e37dfe021a8a --- /dev/null +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -0,0 +1,41 @@ +package org.baeldung.mocks.mockito; + +import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginService; +import org.baeldung.mocks.testCase.UserForm; +import org.junit.Before; +import org.junit.Test; +import org.mockito.*; + +public class LoginControllerTest { + + @Mock + private LoginService loginService; + + @InjectMocks + private LoginController loginController; + + @Before + public void setUp() throws Exception { + loginController = new LoginController(); + MockitoAnnotations.initMocks(this); + } + + @Test + public void whenNoUserForm_thenReturnErrorWithoutCallingService() throws Exception { + // let's assert that no method has been called + loginController.login(null); + Mockito.verifyZeroInteractions(loginService); + } + + @Test + public void whenUserNotLogged_thenReturnKOAndDoNotSet() throws Exception { + // let's assert that only one method has been called + UserForm userForm = new UserForm(); + userForm.username = "foo"; + Mockito.when(loginService.login(userForm)).thenReturn(false); + loginController.login(userForm); + Mockito.verify(loginService).login(userForm); + Mockito.verifyNoMoreInteractions(loginService); + } +} From 9fd7aa4ece9cdb1e8f3121f6a47c77d722b2d69a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 5 Jun 2016 23:46:35 +0200 Subject: [PATCH 05/57] More tests for Mockito. --- .../mocks/testCase/LoginController.java | 4 +- .../org/baeldung/mocks/testCase/UserForm.java | 4 ++ .../mocks/mockito/LoginControllerTest.java | 72 +++++++++++++++++-- 3 files changed, 72 insertions(+), 8 deletions(-) diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java index 16f0b3da591c..819381687234 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java @@ -17,8 +17,8 @@ public String login(UserForm userForm){ } if(logged){ - loginService.setCurrentUser(userForm.username); - return "OK "; + loginService.setCurrentUser(userForm.getUsername()); + return "OK"; }else{ return "KO"; } diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java index 1af9bc7b1294..d6ee44490996 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java @@ -8,4 +8,8 @@ public class UserForm { public String username; + public String getUsername(){ + return username; + } + } diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java index e37dfe021a8a..e4e0bbfb2ae0 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -3,6 +3,7 @@ import org.baeldung.mocks.testCase.LoginController; import org.baeldung.mocks.testCase.LoginService; import org.baeldung.mocks.testCase.UserForm; +import org.junit.Assert; import org.junit.Before; import org.junit.Test; import org.mockito.*; @@ -16,26 +17,85 @@ public class LoginControllerTest { private LoginController loginController; @Before - public void setUp() throws Exception { + public void setUp() { loginController = new LoginController(); MockitoAnnotations.initMocks(this); } @Test - public void whenNoUserForm_thenReturnErrorWithoutCallingService() throws Exception { - // let's assert that no method has been called + public void assertThatNoMethodHasBeenCalled() { loginController.login(null); + Mockito.verifyZeroInteractions(loginService); } @Test - public void whenUserNotLogged_thenReturnKOAndDoNotSet() throws Exception { - // let's assert that only one method has been called + public void assertTwoMethodsHaveBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + Mockito.when(loginService.login(userForm)).thenReturn(true); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + Mockito.verify(loginService).login(userForm); + Mockito.verify(loginService).setCurrentUser("foo"); + } + + @Test + public void assertOnlyOneMethodHasBeenCalled() { UserForm userForm = new UserForm(); userForm.username = "foo"; Mockito.when(loginService.login(userForm)).thenReturn(false); - loginController.login(userForm); + + String login = loginController.login(userForm); + + Assert.assertEquals("KO", login); Mockito.verify(loginService).login(userForm); Mockito.verifyNoMoreInteractions(loginService); } + + @Test + public void mockExceptionThrowin() { + UserForm userForm = new UserForm(); + Mockito.when(loginService.login(userForm)).thenThrow(IllegalArgumentException.class); + + String login = loginController.login(userForm); + + Assert.assertEquals("ERROR", login); + Mockito.verify(loginService).login(userForm); + Mockito.verifyZeroInteractions(loginService); + } + + @Test + public void stubAnObjectToPassAround() throws Exception { + UserForm userForm = Mockito.when(Mockito.mock(UserForm.class).getUsername()).thenReturn("foo").getMock(); + Mockito.when(loginService.login(userForm)).thenReturn(true); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + Mockito.verify(loginService).login(userForm); + Mockito.verify(loginService).setCurrentUser("foo"); + } + + @Test + public void argumentMatching() throws Exception { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // default matcher + Mockito.when(loginService.login(Mockito.any(UserForm.class))).thenReturn(true); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + Mockito.verify(loginService).login(userForm); + // complex matcher + Mockito.verify(loginService).setCurrentUser(Mockito.argThat(new ArgumentMatcher() { + @Override + public boolean matches(Object argument) { + return argument instanceof String && ((String) argument).startsWith("foo"); + } + })); + } } From 915bc6b04537091526c7c1ae1c0deca0822b9860 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Mon, 6 Jun 2016 00:00:18 +0200 Subject: [PATCH 06/57] Even more tests. --- .../mocks/testCase/LoginController.java | 2 +- .../mocks/mockito/LoginControllerTest.java | 28 +++++++++++++++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java index 819381687234..2e25332db864 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java @@ -2,7 +2,7 @@ public class LoginController { - private LoginService loginService; + public LoginService loginService; public String login(UserForm userForm){ if(null == userForm){ diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java index e4e0bbfb2ae0..edd5830829eb 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -1,6 +1,7 @@ package org.baeldung.mocks.mockito; import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginDao; import org.baeldung.mocks.testCase.LoginService; import org.baeldung.mocks.testCase.UserForm; import org.junit.Assert; @@ -10,6 +11,13 @@ public class LoginControllerTest { + @Mock + private LoginDao loginDao; + + @Spy + @InjectMocks + private LoginService spiedLoginService; + @Mock private LoginService loginService; @@ -68,7 +76,7 @@ public void mockExceptionThrowin() { } @Test - public void stubAnObjectToPassAround() throws Exception { + public void stubAnObjectToPassAround() { UserForm userForm = Mockito.when(Mockito.mock(UserForm.class).getUsername()).thenReturn("foo").getMock(); Mockito.when(loginService.login(userForm)).thenReturn(true); @@ -80,7 +88,7 @@ public void stubAnObjectToPassAround() throws Exception { } @Test - public void argumentMatching() throws Exception { + public void argumentMatching() { UserForm userForm = new UserForm(); userForm.username = "foo"; // default matcher @@ -98,4 +106,20 @@ public boolean matches(Object argument) { } })); } + + @Test + public void partialMocking() { + // use partial mock + loginController.loginService = spiedLoginService; + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // let service's login use implementation so let's mock DAO call + Mockito.when(loginDao.login(userForm)).thenReturn(1); + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // verify mocked call + Mockito.verify(spiedLoginService).setCurrentUser("foo"); + } } From 59162e4c684ed473073a7b4bde2c3d3e398fad61 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Mon, 6 Jun 2016 00:00:31 +0200 Subject: [PATCH 07/57] Add the rest of the mocking libraries. --- mock-comparisons/pom.xml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mock-comparisons/pom.xml b/mock-comparisons/pom.xml index 4582e7ebe81f..c7a6dcb09d14 100644 --- a/mock-comparisons/pom.xml +++ b/mock-comparisons/pom.xml @@ -29,6 +29,20 @@ test + + org.easymock + easymock + ${easymock.version} + test + + + + org.jmockit + jmockit + ${jmockit.version} + test + + @@ -76,6 +90,8 @@ 4.12 1.10.19 + 3.4 + 1.24 3.3 From 3ef9946efc7f7574d61cbe35177ef4d7af75148d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 12 Jun 2016 19:56:06 +0200 Subject: [PATCH 08/57] Javadoc on test. --- .../org/baeldung/mocks/mockito/LoginControllerTest.java | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java index edd5830829eb..24b92cd7468c 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -9,6 +9,10 @@ import org.junit.Test; import org.mockito.*; +/** + *

Test for LoginController using Mockito.

+ * Created by Alvaro on 12/06/2016. + */ public class LoginControllerTest { @Mock @@ -33,7 +37,7 @@ public void setUp() { @Test public void assertThatNoMethodHasBeenCalled() { loginController.login(null); - + // no method called Mockito.verifyZeroInteractions(loginService); } @@ -64,7 +68,7 @@ public void assertOnlyOneMethodHasBeenCalled() { } @Test - public void mockExceptionThrowin() { + public void mockExceptionThrowing() { UserForm userForm = new UserForm(); Mockito.when(loginService.login(userForm)).thenThrow(IllegalArgumentException.class); From 5aa5b571e08033cf71525169bec5f6099c8083de Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 12 Jun 2016 20:05:13 +0200 Subject: [PATCH 09/57] Test bare bones for EasyMock. --- .../mocks/easymock/LoginControllerTest.java | 100 ++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java new file mode 100644 index 000000000000..1cbcc49f4398 --- /dev/null +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java @@ -0,0 +1,100 @@ +package org.baeldung.mocks.easymock; + +import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginDao; +import org.baeldung.mocks.testCase.LoginService; +import org.baeldung.mocks.testCase.UserForm; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.*; + +/** + *

Test for LoginController using EasyMock.

+ * Created by Alvaro on 12/06/2016. + */ +public class LoginControllerTest { + + private LoginDao loginDao; + + private LoginService spiedLoginService; + + private LoginService loginService; + + private LoginController loginController; + + @Before + public void setUp() { + loginController = new LoginController(); + } + + @Test + public void assertThatNoMethodHasBeenCalled() { + loginController.login(null); + + // no method called + Mockito.verifyZeroInteractions(loginService); + } + + @Test + public void assertTwoMethodsHaveBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + } + + @Test + public void assertOnlyOneMethodHasBeenCalled() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + + String login = loginController.login(userForm); + + Assert.assertEquals("KO", login); + } + + @Test + public void mockExceptionThrowing() { + UserForm userForm = new UserForm(); + + String login = loginController.login(userForm); + + Assert.assertEquals("ERROR", login); + } + + @Test + public void stubAnObjectToPassAround() { + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + } + + @Test + public void argumentMatching() { + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // default matcher + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // complex matcher + } + + @Test + public void partialMocking() { + // use partial mock + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // let service's login use implementation so let's mock DAO call + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // verify mocked call + } +} From af05a28e581b632fe953e682f23bee716572bd51 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 12 Jun 2016 20:17:02 +0200 Subject: [PATCH 10/57] Fist kind of test and setup. --- .../mocks/easymock/LoginControllerTest.java | 20 +++++++++++-------- 1 file changed, 12 insertions(+), 8 deletions(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java index 1cbcc49f4398..7c9103ef0744 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java @@ -4,36 +4,40 @@ import org.baeldung.mocks.testCase.LoginDao; import org.baeldung.mocks.testCase.LoginService; import org.baeldung.mocks.testCase.UserForm; +import org.easymock.EasyMock; +import org.easymock.EasyMockRunner; +import org.easymock.Mock; +import org.easymock.TestSubject; import org.junit.Assert; import org.junit.Before; import org.junit.Test; -import org.mockito.*; +import org.junit.runner.RunWith; /** *

Test for LoginController using EasyMock.

* Created by Alvaro on 12/06/2016. */ +@RunWith(EasyMockRunner.class) public class LoginControllerTest { + @Mock private LoginDao loginDao; private LoginService spiedLoginService; + @Mock private LoginService loginService; - private LoginController loginController; - - @Before - public void setUp() { - loginController = new LoginController(); - } + @TestSubject + private LoginController loginController = new LoginController(); @Test public void assertThatNoMethodHasBeenCalled() { + EasyMock.replay(loginService); loginController.login(null); // no method called - Mockito.verifyZeroInteractions(loginService); + EasyMock.verify(loginService); } @Test From 0bd3074fddb8f2aee8864e6459e6cdf47ad4579c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 12 Jun 2016 21:23:32 +0200 Subject: [PATCH 11/57] Add tests using EasyMock with a change on LoginService. --- .../baeldung/mocks/testCase/LoginService.java | 4 ++ .../mocks/easymock/LoginControllerTest.java | 61 ++++++++++++++++--- 2 files changed, 56 insertions(+), 9 deletions(-) diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java index c6192e3a2055..2a20159393f0 100644 --- a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java +++ b/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java @@ -25,5 +25,9 @@ public void setCurrentUser(String username) { } } + public void setLoginDao(LoginDao loginDao) { + this.loginDao = loginDao; + } + // standard setters and getters } diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java index 7c9103ef0744..1dbc7dad046f 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java @@ -4,12 +4,8 @@ import org.baeldung.mocks.testCase.LoginDao; import org.baeldung.mocks.testCase.LoginService; import org.baeldung.mocks.testCase.UserForm; -import org.easymock.EasyMock; -import org.easymock.EasyMockRunner; -import org.easymock.Mock; -import org.easymock.TestSubject; +import org.easymock.*; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; import org.junit.runner.RunWith; @@ -23,8 +19,6 @@ public class LoginControllerTest { @Mock private LoginDao loginDao; - private LoginService spiedLoginService; - @Mock private LoginService loginService; @@ -44,37 +38,55 @@ public void assertThatNoMethodHasBeenCalled() { public void assertTwoMethodsHaveBeenCalled() { UserForm userForm = new UserForm(); userForm.username = "foo"; + EasyMock.expect(loginService.login(userForm)).andReturn(true); + loginService.setCurrentUser("foo"); + EasyMock.replay(loginService); String login = loginController.login(userForm); Assert.assertEquals("OK", login); + EasyMock.verify(loginService); } @Test public void assertOnlyOneMethodHasBeenCalled() { UserForm userForm = new UserForm(); userForm.username = "foo"; + EasyMock.expect(loginService.login(userForm)).andReturn(false); + EasyMock.replay(loginService); String login = loginController.login(userForm); Assert.assertEquals("KO", login); + EasyMock.verify(loginService); } @Test public void mockExceptionThrowing() { UserForm userForm = new UserForm(); + EasyMock.expect(loginService.login(userForm)).andThrow(new IllegalArgumentException()); + EasyMock.replay(loginService); String login = loginController.login(userForm); Assert.assertEquals("ERROR", login); + EasyMock.verify(loginService); } @Test public void stubAnObjectToPassAround() { + UserForm userForm = EasyMock.mock(UserForm.class); + EasyMock.expect(userForm.getUsername()).andReturn("foo"); + EasyMock.expect(loginService.login(userForm)).andReturn(true); + loginService.setCurrentUser("foo"); + EasyMock.replay(userForm); + EasyMock.replay(loginService); String login = loginController.login(userForm); Assert.assertEquals("OK", login); + EasyMock.verify(userForm); + EasyMock.verify(loginService); } @Test @@ -82,23 +94,54 @@ public void argumentMatching() { UserForm userForm = new UserForm(); userForm.username = "foo"; // default matcher + EasyMock.expect(loginService.login(EasyMock.isA(UserForm.class))).andReturn(true); + // complex matcher + loginService.setCurrentUser(specificArgumentMatching("foo")); + EasyMock.replay(loginService); String login = loginController.login(userForm); Assert.assertEquals("OK", login); - // complex matcher + EasyMock.verify(loginService); + } + + private static String specificArgumentMatching(final String expected) { + EasyMock.reportMatcher(new IArgumentMatcher() { + @Override + public boolean matches(Object argument) { + return argument instanceof String && ((String) argument).startsWith(expected); + } + + @Override + public void appendTo(StringBuffer buffer) { + //NOOP + } + }); + return null; } @Test public void partialMocking() { - // use partial mock UserForm userForm = new UserForm(); userForm.username = "foo"; + // use partial mock + LoginService loginServicePartial = EasyMock.partialMockBuilder(LoginService.class). + addMockedMethod("setCurrentUser").createMock(); + loginServicePartial.setCurrentUser("foo"); // let service's login use implementation so let's mock DAO call + EasyMock.expect(loginDao.login(userForm)).andReturn(1); + + loginServicePartial.setLoginDao(loginDao); + loginController.loginService = loginServicePartial; + + EasyMock.replay(loginDao); + EasyMock.replay(loginServicePartial); String login = loginController.login(userForm); Assert.assertEquals("OK", login); // verify mocked call + EasyMock.verify(loginServicePartial); + EasyMock.verify(loginDao); } } From 125f7d6614a920ccec49f968e5d7beefd5badd36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 16:18:16 +0200 Subject: [PATCH 12/57] Create LoginControllerTest.java --- .../mocks/jmockit/LoginControllerTest.java | 70 +++++++++++++++++++ 1 file changed, 70 insertions(+) create mode 100644 mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java new file mode 100644 index 000000000000..d68868946985 --- /dev/null +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -0,0 +1,70 @@ +package org.baeldung.mocks.mockito; + +import org.baeldung.mocks.testCase.LoginController; +import org.baeldung.mocks.testCase.LoginDao; +import org.baeldung.mocks.testCase.LoginService; +import org.baeldung.mocks.testCase.UserForm; +import org.junit.Assert; +import org.junit.Before; +import org.junit.Test; +import org.mockito.*; + +/** + *

Test for LoginController using Mockito.

+ * Created by Alvaro on 12/06/2016. + */ +public class LoginControllerTest { + + @Mock + private LoginDao loginDao; + + @Spy + @InjectMocks + private LoginService spiedLoginService; + + @Mock + private LoginService loginService; + + @InjectMocks + private LoginController loginController; + + @Before + public void setUp() { + loginController = new LoginController(); + } + + @Test + public void assertThatNoMethodHasBeenCalled() { + + } + + @Test + public void assertTwoMethodsHaveBeenCalled() { + + } + + @Test + public void assertOnlyOneMethodHasBeenCalled() { + + } + + @Test + public void mockExceptionThrowing() { + + } + + @Test + public void stubAnObjectToPassAround() { + + } + + @Test + public void argumentMatching() { + + } + + @Test + public void partialMocking() { + + } +} From d5e06900e050d7c3779c9c5814ccb1fe185b9e72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 16:56:13 +0200 Subject: [PATCH 13/57] Test setup --- .../mocks/jmockit/LoginControllerTest.java | 15 +++------------ 1 file changed, 3 insertions(+), 12 deletions(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index d68868946985..e9fe5912c1b4 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -15,24 +15,15 @@ */ public class LoginControllerTest { - @Mock + @Injectable private LoginDao loginDao; - @Spy - @InjectMocks - private LoginService spiedLoginService; - - @Mock + @Injectable private LoginService loginService; - @InjectMocks + @Tested private LoginController loginController; - @Before - public void setUp() { - loginController = new LoginController(); - } - @Test public void assertThatNoMethodHasBeenCalled() { From 84ef411f3d906f35ec9d89df2ad76be3b43ce79c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 16:56:51 +0200 Subject: [PATCH 14/57] [JMockit] No method called test. --- .../java/org/baeldung/mocks/jmockit/LoginControllerTest.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index e9fe5912c1b4..53fbed1c900e 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -26,7 +26,9 @@ public class LoginControllerTest { @Test public void assertThatNoMethodHasBeenCalled() { - + loginController.login(null); + // no method called + new FullVerifications(loginService) {}; } @Test From e632bf5f697181ee673e4b1f1ac789a22e800ade Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 16:57:14 +0200 Subject: [PATCH 15/57] [JMockit] Two methods called test. --- .../baeldung/mocks/jmockit/LoginControllerTest.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index 53fbed1c900e..f283363b004a 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -33,7 +33,17 @@ public void assertThatNoMethodHasBeenCalled() { @Test public void assertTwoMethodsHaveBeenCalled() { - + UserForm userForm = new UserForm(); + userForm.username = "foo"; + new Expectations(){{ + loginService.login(userForm); result = true; + loginService.setCurrentUser("foo"); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + new FullVerifications(loginService) {}; } @Test From e00e4e1cc065e42f1fd4f0a3634705e1c738a811 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 16:57:33 +0200 Subject: [PATCH 16/57] [JMockit] One method called test. --- .../baeldung/mocks/jmockit/LoginControllerTest.java | 12 +++++++++++- 1 file changed, 11 insertions(+), 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index f283363b004a..dc0b4c8f10be 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -48,7 +48,17 @@ public void assertTwoMethodsHaveBeenCalled() { @Test public void assertOnlyOneMethodHasBeenCalled() { - + UserForm userForm = new UserForm(); + userForm.username = "foo"; + new Expectations(){{ + loginService.login(userForm); result = false; + // no expectation for setCurrentUser + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("KO", login); + new FullVerifications(loginService) {}; } @Test From 2a30ed72c69f337c5948c8bea4d0b9cceb4d4071 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 17:02:18 +0200 Subject: [PATCH 17/57] [JMockit] Exception mock test --- .../baeldung/mocks/jmockit/LoginControllerTest.java | 11 ++++++++++- 1 file changed, 10 insertions(+), 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index dc0b4c8f10be..73de1ba25013 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -63,7 +63,16 @@ public void assertOnlyOneMethodHasBeenCalled() { @Test public void mockExceptionThrowing() { - + UserForm userForm = new UserForm(); + new Expectations(){{ + loginService.login(userForm); result = new IllegalArgumentException(); + // no expectation for setCurrentUser + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("ERROR", login); + new FullVerifications(loginService) {}; } @Test From 9cd0d0243b3daaa9a74fe3c2b316655df8e44e06 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 17:02:58 +0200 Subject: [PATCH 18/57] [JMockit] Mocked object to pass around test. --- .../mocks/jmockit/LoginControllerTest.java | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index 73de1ba25013..7836f41aa394 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -76,8 +76,18 @@ public void mockExceptionThrowing() { } @Test - public void stubAnObjectToPassAround() { - + public void stubAnObjectToPassAround(@Mocked final UserForm userForm) { + new Expectations(){{ + userForm.getUsername(); result = "foo"; + loginService.login(userForm); result = true; + loginService.setCurrentUser("foo"); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + new FullVerifications(loginService) {}; + new FullVerifications(userForm) {}; } @Test From 9e2414126cf092cdd757632fb14437e59127a4e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 17:12:38 +0200 Subject: [PATCH 19/57] [JMockit] Custom matcher test. --- .../mocks/jmockit/LoginControllerTest.java | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index 7836f41aa394..4f48fe60cb95 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -92,7 +92,22 @@ public void stubAnObjectToPassAround(@Mocked final UserForm userForm) { @Test public void argumentMatching() { - + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // default matcher + new Expectations(){{ + loginService.login((UserForm) any)); result = true; + // complex matcher + loginService.setCurrentUser(withDelegate(new Delegate(){ + boolean delegate(Object argument) { + return argument instanceof String && ((String) argument).startsWith("foo"); + })); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + new FullVerifications(loginService) {}; } @Test From 48925b1a7b47709204d8cad6726c6ca3ff2a3f5d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 17:22:11 +0200 Subject: [PATCH 20/57] [JMockit] Partial mocking test. --- .../mocks/jmockit/LoginControllerTest.java | 21 ++++++++++++++++++- 1 file changed, 20 insertions(+), 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index 4f48fe60cb95..8c9035e27e47 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -112,6 +112,25 @@ boolean delegate(Object argument) { @Test public void partialMocking() { - + // use partial mock + LoginService partialLoginService = new LoginService(); + partialLoginService.setLoginDao(loginDao); + loginController.loginService = partialLoginService; + + UserForm userForm = new UserForm(); + userForm.username = "foo"; + // let service's login use implementation so let's mock DAO call + new Expectations(){{ + loginDao.login(userForm); result = 1; + // no expectation for loginService.login + partialLoginService.setCurrentUser("foo"); + }}; + + String login = loginController.login(userForm); + + Assert.assertEquals("OK", login); + // verify mocked call + new FullVerifications(partialLoginService) {}; + new FullVerifications(loginDao) {}; } } From 4d17086fcdf29012162d15c498002718d750e224 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Tue, 14 Jun 2016 19:24:31 +0200 Subject: [PATCH 21/57] [JMockit] Fix with IDE. --- .../mocks/jmockit/LoginControllerTest.java | 55 ++++++++++++------- 1 file changed, 34 insertions(+), 21 deletions(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index 8c9035e27e47..bd34b1e8baf5 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -1,18 +1,23 @@ -package org.baeldung.mocks.mockito; +package org.baeldung.mocks.jmockit; +import mockit.*; +import mockit.integration.junit4.JMockit; import org.baeldung.mocks.testCase.LoginController; import org.baeldung.mocks.testCase.LoginDao; import org.baeldung.mocks.testCase.LoginService; import org.baeldung.mocks.testCase.UserForm; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; +import org.hamcrest.Matcher; import org.junit.Assert; -import org.junit.Before; import org.junit.Test; -import org.mockito.*; +import org.junit.runner.RunWith; /** - *

Test for LoginController using Mockito.

+ *

Test for LoginController using JMockit.

* Created by Alvaro on 12/06/2016. */ +@RunWith(JMockit.class) public class LoginControllerTest { @Injectable @@ -33,9 +38,9 @@ public void assertThatNoMethodHasBeenCalled() { @Test public void assertTwoMethodsHaveBeenCalled() { - UserForm userForm = new UserForm(); + final UserForm userForm = new UserForm(); userForm.username = "foo"; - new Expectations(){{ + new Expectations() {{ loginService.login(userForm); result = true; loginService.setCurrentUser("foo"); }}; @@ -48,9 +53,9 @@ public void assertTwoMethodsHaveBeenCalled() { @Test public void assertOnlyOneMethodHasBeenCalled() { - UserForm userForm = new UserForm(); + final UserForm userForm = new UserForm(); userForm.username = "foo"; - new Expectations(){{ + new Expectations() {{ loginService.login(userForm); result = false; // no expectation for setCurrentUser }}; @@ -63,8 +68,8 @@ public void assertOnlyOneMethodHasBeenCalled() { @Test public void mockExceptionThrowing() { - UserForm userForm = new UserForm(); - new Expectations(){{ + final UserForm userForm = new UserForm(); + new Expectations() {{ loginService.login(userForm); result = new IllegalArgumentException(); // no expectation for setCurrentUser }}; @@ -77,7 +82,7 @@ public void mockExceptionThrowing() { @Test public void stubAnObjectToPassAround(@Mocked final UserForm userForm) { - new Expectations(){{ + new Expectations() {{ userForm.getUsername(); result = "foo"; loginService.login(userForm); result = true; loginService.setCurrentUser("foo"); @@ -92,15 +97,23 @@ public void stubAnObjectToPassAround(@Mocked final UserForm userForm) { @Test public void argumentMatching() { - UserForm userForm = new UserForm(); + final UserForm userForm = new UserForm(); userForm.username = "foo"; // default matcher - new Expectations(){{ - loginService.login((UserForm) any)); result = true; + new Expectations() {{ + loginService.login((UserForm) any); + result = true; // complex matcher - loginService.setCurrentUser(withDelegate(new Delegate(){ - boolean delegate(Object argument) { - return argument instanceof String && ((String) argument).startsWith("foo"); + loginService.setCurrentUser(withArgThat(new BaseMatcher() { + @Override + public boolean matches(Object item) { + return item instanceof String && ((String) item).startsWith("foo"); + } + + @Override + public void describeTo(Description description) { + //NOOP + } })); }}; @@ -113,14 +126,14 @@ boolean delegate(Object argument) { @Test public void partialMocking() { // use partial mock - LoginService partialLoginService = new LoginService(); + final LoginService partialLoginService = new LoginService(); partialLoginService.setLoginDao(loginDao); loginController.loginService = partialLoginService; - - UserForm userForm = new UserForm(); + + final UserForm userForm = new UserForm(); userForm.username = "foo"; // let service's login use implementation so let's mock DAO call - new Expectations(){{ + new Expectations() {{ loginDao.login(userForm); result = 1; // no expectation for loginService.login partialLoginService.setCurrentUser("foo"); From 92bb44e4df11c30855808ba10609e359ad77885c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Fri, 17 Jun 2016 17:55:08 +0200 Subject: [PATCH 22/57] Not stubs. Mocks. MOCKS!!! --- .../java/org/baeldung/mocks/easymock/LoginControllerTest.java | 2 +- .../java/org/baeldung/mocks/jmockit/LoginControllerTest.java | 2 +- .../java/org/baeldung/mocks/mockito/LoginControllerTest.java | 2 +- 3 files changed, 3 insertions(+), 3 deletions(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java index 1dbc7dad046f..b80c28804a54 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java @@ -74,7 +74,7 @@ public void mockExceptionThrowing() { } @Test - public void stubAnObjectToPassAround() { + public void mockAnObjectToPassAround() { UserForm userForm = EasyMock.mock(UserForm.class); EasyMock.expect(userForm.getUsername()).andReturn("foo"); EasyMock.expect(loginService.login(userForm)).andReturn(true); diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index bd34b1e8baf5..0939a91e2c47 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -81,7 +81,7 @@ public void mockExceptionThrowing() { } @Test - public void stubAnObjectToPassAround(@Mocked final UserForm userForm) { + public void mockAnObjectToPassAround(@Mocked final UserForm userForm) { new Expectations() {{ userForm.getUsername(); result = "foo"; loginService.login(userForm); result = true; diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java index 24b92cd7468c..841dd493e6a7 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java @@ -80,7 +80,7 @@ public void mockExceptionThrowing() { } @Test - public void stubAnObjectToPassAround() { + public void mockAnObjectToPassAround() { UserForm userForm = Mockito.when(Mockito.mock(UserForm.class).getUsername()).thenReturn("foo").getMock(); Mockito.when(loginService.login(userForm)).thenReturn(true); From b1a1e9e163bbb503d01be560c6955172a3989e83 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 18 Jun 2016 13:04:12 +0200 Subject: [PATCH 23/57] Remove unnecesary import. --- .../java/org/baeldung/mocks/jmockit/LoginControllerTest.java | 1 - 1 file changed, 1 deletion(-) diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java index 0939a91e2c47..d1c502ce559c 100644 --- a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java +++ b/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java @@ -8,7 +8,6 @@ import org.baeldung.mocks.testCase.UserForm; import org.hamcrest.BaseMatcher; import org.hamcrest.Description; -import org.hamcrest.Matcher; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; From 517eef2174f1c35619aafdd9a5a7cd0b7db16319 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 02:58:11 +0200 Subject: [PATCH 24/57] Use correct encoding. Was having problems with buildings. --- pom.xml | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/pom.xml b/pom.xml index 75281ce80d5c..8aae3e0085d8 100644 --- a/pom.xml +++ b/pom.xml @@ -7,6 +7,11 @@ parent-modules pom + + + UTF-8 + + apache-fop assertj From 6fa3670f3a253ae15e69905626133382a8a757dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 02:58:19 +0200 Subject: [PATCH 25/57] Remove failing module. --- pom.xml | 1 - 1 file changed, 1 deletion(-) diff --git a/pom.xml b/pom.xml index 8aae3e0085d8..8d7551023a17 100644 --- a/pom.xml +++ b/pom.xml @@ -13,7 +13,6 @@ - apache-fop assertj core-java From f083e31e77061384841144d23eaf3eb5b307f88f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 03:01:34 +0200 Subject: [PATCH 26/57] Create new module mocks and move mock-comparisons there. --- .../mock-comparisons}/README.md | 0 .../mock-comparisons}/pom.xml | 15 +++++++++------ .../mocks/testCase/LoginController.java | 0 .../org/baeldung/mocks/testCase/LoginDao.java | 0 .../baeldung/mocks/testCase/LoginService.java | 0 .../org/baeldung/mocks/testCase/UserForm.java | 0 .../mocks/easymock/LoginControllerTest.java | 0 .../mocks/jmockit/LoginControllerTest.java | 0 .../mocks/mockito/LoginControllerTest.java | 0 mocks/pom.xml | 19 +++++++++++++++++++ pom.xml | 2 +- 11 files changed, 29 insertions(+), 7 deletions(-) rename {mock-comparisons => mocks/mock-comparisons}/README.md (100%) rename {mock-comparisons => mocks/mock-comparisons}/pom.xml (90%) rename {mock-comparisons => mocks/mock-comparisons}/src/main/java/org/baeldung/mocks/testCase/LoginController.java (100%) rename {mock-comparisons => mocks/mock-comparisons}/src/main/java/org/baeldung/mocks/testCase/LoginDao.java (100%) rename {mock-comparisons => mocks/mock-comparisons}/src/main/java/org/baeldung/mocks/testCase/LoginService.java (100%) rename {mock-comparisons => mocks/mock-comparisons}/src/main/java/org/baeldung/mocks/testCase/UserForm.java (100%) rename {mock-comparisons => mocks/mock-comparisons}/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java (100%) rename {mock-comparisons => mocks/mock-comparisons}/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java (100%) rename {mock-comparisons => mocks/mock-comparisons}/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java (100%) create mode 100644 mocks/pom.xml diff --git a/mock-comparisons/README.md b/mocks/mock-comparisons/README.md similarity index 100% rename from mock-comparisons/README.md rename to mocks/mock-comparisons/README.md diff --git a/mock-comparisons/pom.xml b/mocks/mock-comparisons/pom.xml similarity index 90% rename from mock-comparisons/pom.xml rename to mocks/mock-comparisons/pom.xml index c5424d262d0b..76834b6eef5d 100644 --- a/mock-comparisons/pom.xml +++ b/mocks/mock-comparisons/pom.xml @@ -1,19 +1,22 @@ 4.0.0 - org.baeldung - mock-comparisons - 0.1-SNAPSHOT - mockito + + com.baeldung + mocks + 1.0.0-SNAPSHOT + ../pom.xml + + + mock-comparisons + mock-comparisons 4.12 1.10.19 3.4 1.24 - - UTF-8 3.3 diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java b/mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java similarity index 100% rename from mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java rename to mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginController.java diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java b/mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java similarity index 100% rename from mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java rename to mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginDao.java diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java b/mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java similarity index 100% rename from mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java rename to mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/LoginService.java diff --git a/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java b/mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java similarity index 100% rename from mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java rename to mocks/mock-comparisons/src/main/java/org/baeldung/mocks/testCase/UserForm.java diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java b/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java similarity index 100% rename from mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java rename to mocks/mock-comparisons/src/test/java/org/baeldung/mocks/easymock/LoginControllerTest.java diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java b/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java similarity index 100% rename from mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java rename to mocks/mock-comparisons/src/test/java/org/baeldung/mocks/jmockit/LoginControllerTest.java diff --git a/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java b/mocks/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java similarity index 100% rename from mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java rename to mocks/mock-comparisons/src/test/java/org/baeldung/mocks/mockito/LoginControllerTest.java diff --git a/mocks/pom.xml b/mocks/pom.xml new file mode 100644 index 000000000000..63e59d19d4b6 --- /dev/null +++ b/mocks/pom.xml @@ -0,0 +1,19 @@ + + 4.0.0 + + + com.baeldung + parent-modules + 1.0.0-SNAPSHOT + ../pom.xml + + + mocks + mocks + pom + + + mock-comparisons + + + diff --git a/pom.xml b/pom.xml index 8d7551023a17..f6dda4efd1e5 100644 --- a/pom.xml +++ b/pom.xml @@ -29,7 +29,7 @@ jooq-spring json-path mockito - mock-comparisons + mocks jee7schedule querydsl From eb31bba16654c11d20c7b346f740a6aad5fa0784 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 03:02:32 +0200 Subject: [PATCH 27/57] Add jmockit module. --- mocks/jmockit/README.md | 7 +++++ mocks/jmockit/pom.xml | 68 +++++++++++++++++++++++++++++++++++++++++ mocks/pom.xml | 1 + 3 files changed, 76 insertions(+) create mode 100644 mocks/jmockit/README.md create mode 100644 mocks/jmockit/pom.xml diff --git a/mocks/jmockit/README.md b/mocks/jmockit/README.md new file mode 100644 index 000000000000..f5b0f5ae2bf0 --- /dev/null +++ b/mocks/jmockit/README.md @@ -0,0 +1,7 @@ +========= + +## JMockit realated tutorials + + +### Relevant Articles: +- [JMockit 101](http://www.baeldung.com/jmockit-101) diff --git a/mocks/jmockit/pom.xml b/mocks/jmockit/pom.xml new file mode 100644 index 000000000000..8b03313a5197 --- /dev/null +++ b/mocks/jmockit/pom.xml @@ -0,0 +1,68 @@ + + 4.0.0 + + + com.baeldung + mocks + 1.0.0-SNAPSHOT + ../pom.xml + + + jmockit + jmockit + + + 4.12 + 1.24 + + + 3.3 + 2.18.1 + + + + + junit + junit + ${junit.version} + test + + + + org.jmockit + jmockit + ${jmockit.version} + test + + + + + jmockit + + + src/main/resources + true + + + + + + org.apache.maven.plugins + maven-compiler-plugin + ${maven-compiler-plugin.version} + + 1.8 + 1.8 + + + + + org.apache.maven.plugins + maven-surefire-plugin + ${maven-surefire-plugin.version} + + + + + \ No newline at end of file diff --git a/mocks/pom.xml b/mocks/pom.xml index 63e59d19d4b6..ec02c255ef1d 100644 --- a/mocks/pom.xml +++ b/mocks/pom.xml @@ -14,6 +14,7 @@ mock-comparisons + jmockit From 5dde0ed42562eeb384de80c433b1d503729921df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 03:02:41 +0200 Subject: [PATCH 28/57] Add model class. --- .../src/main/java/org/baeldung/mocks/jmockit/Model.java | 7 +++++++ 1 file changed, 7 insertions(+) create mode 100644 mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java new file mode 100644 index 000000000000..54249dcd1d47 --- /dev/null +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java @@ -0,0 +1,7 @@ +package org.baeldung.mocks.jmockit; + +public class Model { + public String getInfo(){ + return "info"; + } +} From 11b84973cdb4a5f979f4f6b7b8ba7f933ac476e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 03:02:48 +0200 Subject: [PATCH 29/57] Add collaborator class. --- .../java/org/baeldung/mocks/jmockit/Collaborator.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Collaborator.java diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Collaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Collaborator.java new file mode 100644 index 000000000000..ef271b9affc5 --- /dev/null +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Collaborator.java @@ -0,0 +1,10 @@ +package org.baeldung.mocks.jmockit; + +public class Collaborator { + public boolean collaborate(String string){ + return false; + } + public void receive(boolean bool){ + //NOOP + } +} From b16d4b2d623815dc9916c4c1eb71c22d0b263585 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 03:02:56 +0200 Subject: [PATCH 30/57] Add performer class. --- .../java/org/baeldung/mocks/jmockit/Performer.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Performer.java diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Performer.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Performer.java new file mode 100644 index 000000000000..4f8e8adb24b6 --- /dev/null +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Performer.java @@ -0,0 +1,10 @@ +package org.baeldung.mocks.jmockit; + +public class Performer { + private Collaborator collaborator; + + public void perform(Model model){ + boolean value = collaborator.collaborate(model.getInfo()); + collaborator.receive(value); + } +} From 9277aa8b38f057c287084ac19b18ca1ad83310c5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 3 Jul 2016 03:03:02 +0200 Subject: [PATCH 31/57] Add performer test. --- .../baeldung/mocks/jmockit/PerformerTest.java | 30 +++++++++++++++++++ 1 file changed, 30 insertions(+) create mode 100644 mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/PerformerTest.java diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/PerformerTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/PerformerTest.java new file mode 100644 index 000000000000..c99ae844c368 --- /dev/null +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/PerformerTest.java @@ -0,0 +1,30 @@ +package org.baeldung.mocks.jmockit; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import mockit.*; +import mockit.integration.junit4.JMockit; + +@RunWith(JMockit.class) +public class PerformerTest { + + @Injectable + private Collaborator collaborator; + + @Tested + private Performer performer; + + @Test + public void testThePerformMethod(@Mocked Model model) { + new Expectations() {{ + model.getInfo();result = "bar"; + collaborator.collaborate("bar"); result = true; + }}; + performer.perform(model); + new Verifications() {{ + collaborator.receive(true); + }}; + } + +} From 6fff1c011526aaccdc944ee4ffcd12c9c91992a5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 6 Jul 2016 09:59:05 +0200 Subject: [PATCH 32/57] Fix --- mocks/jmockit/README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/mocks/jmockit/README.md b/mocks/jmockit/README.md index f5b0f5ae2bf0..c310463c2640 100644 --- a/mocks/jmockit/README.md +++ b/mocks/jmockit/README.md @@ -1,6 +1,6 @@ ========= -## JMockit realated tutorials +## JMockit related tutorials ### Relevant Articles: From 149b36c16258a8f2249f5c45025f33cb1f750dc5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 16:24:22 +0200 Subject: [PATCH 33/57] Add interface for tests. --- .../baeldung/mocks/jmockit/ExpectationsCollaborator.java | 8 ++++++++ 1 file changed, 8 insertions(+) create mode 100644 mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java new file mode 100644 index 000000000000..e36ed6702aec --- /dev/null +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -0,0 +1,8 @@ +package org.baeldung.mocks.jmockit; + +import java.util.List; + +public interface ExpectationsCollaborator { + void methodForAny(String s, int i, Boolean b, List l); + void methodForWith(String s, int i, Boolean b, List l); +} From cf1c51541e0ac8099647ada104675793b24f10c7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 16:44:54 +0200 Subject: [PATCH 34/57] Test for any. --- .../mocks/jmockit/ExpectationsTest.java | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java new file mode 100644 index 000000000000..1fff637e0131 --- /dev/null +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -0,0 +1,26 @@ +package org.baeldung.mocks.jmockit; + +import java.util.List; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import mockit.Expectations; +import mockit.Mocked; +import mockit.integration.junit4.JMockit; + +@RunWith(JMockit.class) +@SuppressWarnings("unchecked") +public class ExpectationsTest { + + @Test + public void testForAny(@Mocked ExpectationsCollaborator mock) throws Exception { + new Expectations() { + { + mock.methodForAny(anyString, anyInt, anyBoolean, (List) any); + } + }; + mock.methodForAny("barfooxyz", 0, Boolean.FALSE, new ArrayList<>()); + } + } +} From 815dbec6d2a7b55c778899a83e0f8eaa8bf999b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 16:45:17 +0200 Subject: [PATCH 35/57] Test for with. --- .../org/baeldung/mocks/jmockit/ExpectationsTest.java | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index 1fff637e0131..bf97d89640b5 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -22,5 +22,15 @@ public void testForAny(@Mocked ExpectationsCollaborator mock) throws Exception { }; mock.methodForAny("barfooxyz", 0, Boolean.FALSE, new ArrayList<>()); } + + @Test + public void testForWith(@Mocked ExpectationsCollaborator mock) throws Exception { + new Expectations() { + { + mock.methodForWith(withSubstring("foo"), withNotEqual(1), withNotNull(), withInstanceOf(List.class)); + } + }; + mock.methodForWith("barfooxyz", 2, Boolean.TRUE, new ArrayList<>()); + } } } From 1a2c924c8914b761df6f1785fff9c62416379f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 16:46:03 +0200 Subject: [PATCH 36/57] Test for null. --- .../mocks/jmockit/ExpectationsCollaborator.java | 1 + .../org/baeldung/mocks/jmockit/ExpectationsTest.java | 12 ++++++++++++ 2 files changed, 13 insertions(+) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index e36ed6702aec..44a16f773b75 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -5,4 +5,5 @@ public interface ExpectationsCollaborator { void methodForAny(String s, int i, Boolean b, List l); void methodForWith(String s, int i, Boolean b, List l); + void methodForNulls(String s, List l, List m); } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index bf97d89640b5..e61e17c9b756 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -1,5 +1,6 @@ package org.baeldung.mocks.jmockit; +import java.util.ArrayList; import java.util.List; import org.junit.Test; @@ -32,5 +33,16 @@ public void testForWith(@Mocked ExpectationsCollaborator mock) throws Exception }; mock.methodForWith("barfooxyz", 2, Boolean.TRUE, new ArrayList<>()); } + + @Test + public void testWithNulls(@Mocked ExpectationsCollaborator mock) { + // more config + new Expectations() { + { + mock.methodForNulls(anyString, null, (List) withNull()); + } + }; + mock.methodForNulls("blablabla", new ArrayList(), null); + } } } From 972caca703d7d07c4842add80cd2daefe7548b4c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 16:46:17 +0200 Subject: [PATCH 37/57] Test for times. --- .../jmockit/ExpectationsCollaborator.java | 3 +++ .../mocks/jmockit/ExpectationsTest.java | 23 +++++++++++++++++++ 2 files changed, 26 insertions(+) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index 44a16f773b75..99ce65ec34ed 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -6,4 +6,7 @@ public interface ExpectationsCollaborator { void methodForAny(String s, int i, Boolean b, List l); void methodForWith(String s, int i, Boolean b, List l); void methodForNulls(String s, List l, List m); + void methodForTimes1(); + void methodForTimes2(); + void methodForTimes3(); } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index e61e17c9b756..db849cc9650a 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -44,5 +44,28 @@ public void testWithNulls(@Mocked ExpectationsCollaborator mock) { }; mock.methodForNulls("blablabla", new ArrayList(), null); } + + @Test + public void testWithTimes(@Mocked ExpectationsCollaborator mock) { + // more config + new Expectations() { + { + // exactly 2 invocations to foo() are expected + mock.methodForTimes1(); + times = 2; + // we expect from 1 to 3 invocations to bar() + mock.methodForTimes2(); + minTimes = 1; + maxTimes = 3; + mock.methodForTimes3(); // "minTimes = 1" is implied + } + }; + mock.methodForTimes1(); + mock.methodForTimes1(); + mock.methodForTimes2(); + mock.methodForTimes2(); + mock.methodForTimes2(); + mock.methodForTimes3(); + } } } From 23eea1c234845af9cdb9187468cc2e73301b5e3f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 16:46:26 +0200 Subject: [PATCH 38/57] Test for arg that. --- .../jmockit/ExpectationsCollaborator.java | 1 + .../org/baeldung/mocks/jmockit/Model.java | 6 +++--- .../mocks/jmockit/ExpectationsTest.java | 21 +++++++++++++++++++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index 99ce65ec34ed..e7841b85e130 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -9,4 +9,5 @@ public interface ExpectationsCollaborator { void methodForTimes1(); void methodForTimes2(); void methodForTimes3(); + void methodForArgThat(Object o); } diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java index 54249dcd1d47..c3b63d11b4a7 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/Model.java @@ -1,7 +1,7 @@ package org.baeldung.mocks.jmockit; public class Model { - public String getInfo(){ - return "info"; - } + public String getInfo(){ + return "info"; + } } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index db849cc9650a..5e959fa9664d 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -3,6 +3,8 @@ import java.util.ArrayList; import java.util.List; +import org.hamcrest.BaseMatcher; +import org.hamcrest.Description; import org.junit.Test; import org.junit.runner.RunWith; @@ -67,5 +69,24 @@ public void testWithTimes(@Mocked ExpectationsCollaborator mock) { mock.methodForTimes2(); mock.methodForTimes3(); } + + @Test + public void testCustomArgumentMatching(@Mocked ExpectationsCollaborator mock) { + new Expectations() { + { + mock.methodForArgThat(withArgThat(new BaseMatcher() { + @Override + public boolean matches(Object item) { + return item instanceof Model && "info".equals(((Model) item).getInfo()); + } + + @Override + public void describeTo(Description description) { + // NOOP + } + })); + } + }; + mock.methodForArgThat(new Model()); } } From 80c2a0b0b74401c2c31f5653b9c5487b41d1b251 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 17:05:31 +0200 Subject: [PATCH 39/57] Test for result and returns. --- .../jmockit/ExpectationsCollaborator.java | 2 + .../mocks/jmockit/ExpectationsTest.java | 38 +++++++++++++++++++ 2 files changed, 40 insertions(+) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index e7841b85e130..816196894a72 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -10,4 +10,6 @@ public interface ExpectationsCollaborator { void methodForTimes2(); void methodForTimes3(); void methodForArgThat(Object o); + String methodReturnsString(); + int methodReturnsInt(); } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index 5e959fa9664d..af602c4d4e51 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -1,5 +1,7 @@ package org.baeldung.mocks.jmockit; +import static org.junit.Assert.*; + import java.util.ArrayList; import java.util.List; @@ -10,6 +12,7 @@ import mockit.Expectations; import mockit.Mocked; +import mockit.StrictExpectations; import mockit.integration.junit4.JMockit; @RunWith(JMockit.class) @@ -89,4 +92,39 @@ public void describeTo(Description description) { }; mock.methodForArgThat(new Model()); } + + @Test + public void testResultAndReturns(@Mocked ExpectationsCollaborator mock) { + new StrictExpectations() { + { + // return "foo", an exception and lastly "bar" + mock.methodReturnsString(); + result = "foo"; + result = new Exception(); + result = "bar"; + // return 1, 2, 3 + mock.methodReturnsInt(); + result = new int[] { 1, 2, 3 }; + // return "foo" and "bar" + mock.methodReturnsString(); + returns("foo", "bar"); + // return only 1 + mock.methodReturnsInt(); + result = 1; + } + }; + assertEquals("Should return foo", "foo", mock.methodReturnsString()); + try { + mock.methodReturnsString(); + } catch (Exception e) { + // NOOP + } + assertEquals("Should return bar", "bar", mock.methodReturnsString()); + assertEquals("Should return 1", 1, mock.methodReturnsInt()); + assertEquals("Should return 2", 2, mock.methodReturnsInt()); + assertEquals("Should return 3", 3, mock.methodReturnsInt()); + assertEquals("Should return foo", "foo", mock.methodReturnsString()); + assertEquals("Should return bar", "bar", mock.methodReturnsString()); + assertEquals("Should return 1", 1, mock.methodReturnsInt()); + } } From df72be73000562fc339dbc531003c8074b5a8fc3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 17 Jul 2016 23:30:44 +0200 Subject: [PATCH 40/57] Test for delegate. --- .../jmockit/ExpectationsCollaborator.java | 1 + .../mocks/jmockit/ExpectationsTest.java | 27 +++++++++++++++++++ 2 files changed, 28 insertions(+) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index 816196894a72..510ce222c007 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -12,4 +12,5 @@ public interface ExpectationsCollaborator { void methodForArgThat(Object o); String methodReturnsString(); int methodReturnsInt(); + Object methodForDelegate(int i); } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index af602c4d4e51..5d0af157d16f 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -10,6 +10,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import mockit.Delegate; import mockit.Expectations; import mockit.Mocked; import mockit.StrictExpectations; @@ -127,4 +128,30 @@ public void testResultAndReturns(@Mocked ExpectationsCollaborator mock) { assertEquals("Should return bar", "bar", mock.methodReturnsString()); assertEquals("Should return 1", 1, mock.methodReturnsInt()); } + + @Test + public void testDelegate(@Mocked ExpectationsCollaborator mock) { + new StrictExpectations() { + { + // return "foo", an exception and lastly "bar" + mock.methodForDelegate(anyInt); + times = 2; + result = new Delegate() { + public int delegate(int i) throws Exception { + if (i < 3) { + return 5; + } else { + throw new Exception(); + } + } + }; + } + }; + assertEquals("Should return 5", 5, mock.methodForDelegate(1)); + try { + mock.methodForDelegate(3); + } catch (Exception e) { + // NOOP + } + } } From 60dda57c93354cffa6a8abd70c0e531b70f6eb14 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 20 Jul 2016 08:04:56 +0200 Subject: [PATCH 41/57] Add verifications to any tests. --- .../mocks/jmockit/ExpectationsCollaborator.java | 3 ++- .../baeldung/mocks/jmockit/ExpectationsTest.java | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 3 deletions(-) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index 510ce222c007..b06496a1ec0a 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -3,7 +3,8 @@ import java.util.List; public interface ExpectationsCollaborator { - void methodForAny(String s, int i, Boolean b, List l); + String methodForAny1(String s, int i, Boolean b); + void methodForAny2(Long l, List lst); void methodForWith(String s, int i, Boolean b, List l); void methodForNulls(String s, List l, List m); void methodForTimes1(); diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index 5d0af157d16f..fabd73d23e3a 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -14,6 +14,7 @@ import mockit.Expectations; import mockit.Mocked; import mockit.StrictExpectations; +import mockit.Verifications; import mockit.integration.junit4.JMockit; @RunWith(JMockit.class) @@ -24,10 +25,19 @@ public class ExpectationsTest { public void testForAny(@Mocked ExpectationsCollaborator mock) throws Exception { new Expectations() { { - mock.methodForAny(anyString, anyInt, anyBoolean, (List) any); + mock.methodForAny1(anyString, anyInt, anyBoolean); + result = "any"; + } + }; + + assertEquals("any", mock.methodForAny1("barfooxyz", 0, Boolean.FALSE)); + mock.methodForAny2(2L, new ArrayList<>()); + + new Verifications() { + { + mock.methodForAny2(anyLong, (List) any); } }; - mock.methodForAny("barfooxyz", 0, Boolean.FALSE, new ArrayList<>()); } @Test From 8da0f90c9e3f412b82695af4d905645dc598267e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 20 Jul 2016 08:11:59 +0200 Subject: [PATCH 42/57] Add verifications to with test. --- .../mocks/jmockit/ExpectationsCollaborator.java | 3 ++- .../baeldung/mocks/jmockit/ExpectationsTest.java | 13 +++++++++++-- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index b06496a1ec0a..3f379f832bc1 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -5,7 +5,8 @@ public interface ExpectationsCollaborator { String methodForAny1(String s, int i, Boolean b); void methodForAny2(Long l, List lst); - void methodForWith(String s, int i, Boolean b, List l); + String methodForWith1(String s, int i); + void methodForWith2(Boolean b, List l); void methodForNulls(String s, List l, List m); void methodForTimes1(); void methodForTimes2(); diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index fabd73d23e3a..aec37e0f02f5 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -44,10 +44,19 @@ public void testForAny(@Mocked ExpectationsCollaborator mock) throws Exception { public void testForWith(@Mocked ExpectationsCollaborator mock) throws Exception { new Expectations() { { - mock.methodForWith(withSubstring("foo"), withNotEqual(1), withNotNull(), withInstanceOf(List.class)); + mock.methodForWith1(withSubstring("foo"), withNotEqual(1)); + result = "with"; + } + }; + + assertEquals("with", mock.methodForWith1("barfooxyz", 2)); + mock.methodForWith2(Boolean.TRUE, new ArrayList<>()); + + new Verifications() { + { + mock.methodForWith2(withNotNull(), withInstanceOf(List.class)); } }; - mock.methodForWith("barfooxyz", 2, Boolean.TRUE, new ArrayList<>()); } @Test From 287ae6ee0e32c635b86aa20af0e67f92ba30ca8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 20 Jul 2016 08:28:38 +0200 Subject: [PATCH 43/57] Add verification examples to methods using null. --- .../mocks/jmockit/ExpectationsCollaborator.java | 3 ++- .../baeldung/mocks/jmockit/ExpectationsTest.java | 14 +++++++++++--- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java index 3f379f832bc1..820946493665 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ExpectationsCollaborator.java @@ -7,7 +7,8 @@ public interface ExpectationsCollaborator { void methodForAny2(Long l, List lst); String methodForWith1(String s, int i); void methodForWith2(Boolean b, List l); - void methodForNulls(String s, List l, List m); + String methodForNulls1(String s, List l); + void methodForNulls2(String s, List l); void methodForTimes1(); void methodForTimes2(); void methodForTimes3(); diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index aec37e0f02f5..2c18aa26cee7 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -61,13 +61,21 @@ public void testForWith(@Mocked ExpectationsCollaborator mock) throws Exception @Test public void testWithNulls(@Mocked ExpectationsCollaborator mock) { - // more config new Expectations() { { - mock.methodForNulls(anyString, null, (List) withNull()); + mock.methodForNulls1(anyString, null); + result = "null"; + } + }; + + assertEquals("null", mock.methodForNulls1("blablabla", new ArrayList())); + mock.methodForNulls2("blablabla", null); + + new Verifications() { + { + mock.methodForNulls2(anyString, (List) withNull()); } }; - mock.methodForNulls("blablabla", new ArrayList(), null); } @Test From 74a4e5369d7a39e3bedfb15c90ef86e67f7096e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 20 Jul 2016 08:28:48 +0200 Subject: [PATCH 44/57] Add verifications to methods using times. --- .../mocks/jmockit/ExpectationsTest.java | 23 +++++++++++-------- 1 file changed, 14 insertions(+), 9 deletions(-) diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index 2c18aa26cee7..9963d44a6984 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -80,25 +80,30 @@ public void testWithNulls(@Mocked ExpectationsCollaborator mock) { @Test public void testWithTimes(@Mocked ExpectationsCollaborator mock) { - // more config new Expectations() { { - // exactly 2 invocations to foo() are expected + // exactly 2 invocations are expected mock.methodForTimes1(); times = 2; - // we expect from 1 to 3 invocations to bar() - mock.methodForTimes2(); - minTimes = 1; - maxTimes = 3; - mock.methodForTimes3(); // "minTimes = 1" is implied + mock.methodForTimes2(); // "minTimes = 1" is implied } }; + mock.methodForTimes1(); mock.methodForTimes1(); mock.methodForTimes2(); - mock.methodForTimes2(); - mock.methodForTimes2(); mock.methodForTimes3(); + mock.methodForTimes3(); + mock.methodForTimes3(); + + new Verifications() { + { + // we expect from 1 to 3 invocations + mock.methodForTimes3(); + minTimes = 1; + maxTimes = 3; + } + }; } @Test From 30606d43a4c633a89fb101cb8de49669e37e8f26 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 20 Jul 2016 08:39:43 +0200 Subject: [PATCH 45/57] Formatting. --- .../test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java | 1 + 1 file changed, 1 insertion(+) diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index 9963d44a6984..d1f3fa9e8503 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -146,6 +146,7 @@ public void testResultAndReturns(@Mocked ExpectationsCollaborator mock) { result = 1; } }; + assertEquals("Should return foo", "foo", mock.methodReturnsString()); try { mock.methodReturnsString(); From b3af2133dc9fd4918f125fc2da98bb5825996ea0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Wed, 20 Jul 2016 13:49:48 +0200 Subject: [PATCH 46/57] Compress tests and fix one test. --- .../mocks/jmockit/ExpectationsTest.java | 28 +++++-------------- 1 file changed, 7 insertions(+), 21 deletions(-) diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java index d1f3fa9e8503..239bd814cd7c 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ExpectationsTest.java @@ -82,10 +82,8 @@ public void testWithNulls(@Mocked ExpectationsCollaborator mock) { public void testWithTimes(@Mocked ExpectationsCollaborator mock) { new Expectations() { { - // exactly 2 invocations are expected - mock.methodForTimes1(); - times = 2; - mock.methodForTimes2(); // "minTimes = 1" is implied + mock.methodForTimes1(); times = 2; + mock.methodForTimes2(); } }; @@ -98,10 +96,7 @@ public void testWithTimes(@Mocked ExpectationsCollaborator mock) { new Verifications() { { - // we expect from 1 to 3 invocations - mock.methodForTimes3(); - minTimes = 1; - maxTimes = 3; + mock.methodForTimes3(); minTimes = 1; maxTimes = 3; } }; } @@ -117,9 +112,7 @@ public boolean matches(Object item) { } @Override - public void describeTo(Description description) { - // NOOP - } + public void describeTo(Description description) { } })); } }; @@ -130,18 +123,14 @@ public void describeTo(Description description) { public void testResultAndReturns(@Mocked ExpectationsCollaborator mock) { new StrictExpectations() { { - // return "foo", an exception and lastly "bar" mock.methodReturnsString(); result = "foo"; result = new Exception(); result = "bar"; - // return 1, 2, 3 mock.methodReturnsInt(); result = new int[] { 1, 2, 3 }; - // return "foo" and "bar" mock.methodReturnsString(); returns("foo", "bar"); - // return only 1 mock.methodReturnsInt(); result = 1; } @@ -164,11 +153,9 @@ public void testResultAndReturns(@Mocked ExpectationsCollaborator mock) { @Test public void testDelegate(@Mocked ExpectationsCollaborator mock) { - new StrictExpectations() { + new Expectations() { { - // return "foo", an exception and lastly "bar" mock.methodForDelegate(anyInt); - times = 2; result = new Delegate() { public int delegate(int i) throws Exception { if (i < 3) { @@ -180,11 +167,10 @@ public int delegate(int i) throws Exception { }; } }; + assertEquals("Should return 5", 5, mock.methodForDelegate(1)); try { mock.methodForDelegate(3); - } catch (Exception e) { - // NOOP - } + } catch (Exception e) { } } } From 70ca81b0af54a4d1dffd9ba6f0264e3b0b11647e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Fri, 22 Jul 2016 07:59:11 +0200 Subject: [PATCH 47/57] Adding new article to readme. --- mocks/jmockit/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mocks/jmockit/README.md b/mocks/jmockit/README.md index c310463c2640..d04a07fdc598 100644 --- a/mocks/jmockit/README.md +++ b/mocks/jmockit/README.md @@ -5,3 +5,4 @@ ### Relevant Articles: - [JMockit 101](http://www.baeldung.com/jmockit-101) +- [A Guide to JMockit Expectations](http://www.baeldung.com/jmockit-expectations) From e42aa8148e58e9b896d58a7752891039ecd97fef Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 30 Jul 2016 20:38:50 +0200 Subject: [PATCH 48/57] [BAEL-178] Add collaborator for advanced article. --- .../baeldung/mocks/jmockit/AdvancedCollaborator.java | 10 ++++++++++ 1 file changed, 10 insertions(+) create mode 100644 mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java new file mode 100644 index 000000000000..54abaaa96cc7 --- /dev/null +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java @@ -0,0 +1,10 @@ +package org.baeldung.mocks.jmockit; + +public class AdvancedCollaborator { + public String methodThatCallsPrivateMethod(int i){ + return privateMethod() + i; + } + private String privateMethod(){ + return "default:"; + } +} From 40a8b899a3655bc551dfbfb52993436c420cd21c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 30 Jul 2016 20:39:47 +0200 Subject: [PATCH 49/57] [BAEL-178] Add link to readme. --- mocks/jmockit/README.md | 1 + 1 file changed, 1 insertion(+) diff --git a/mocks/jmockit/README.md b/mocks/jmockit/README.md index d04a07fdc598..db78b2a3acf9 100644 --- a/mocks/jmockit/README.md +++ b/mocks/jmockit/README.md @@ -6,3 +6,4 @@ ### Relevant Articles: - [JMockit 101](http://www.baeldung.com/jmockit-101) - [A Guide to JMockit Expectations](http://www.baeldung.com/jmockit-expectations) +- [JMockit Advanced Topics](http://www.baeldung.com/jmockit-advanced-topics) From 7c0c892eca4fe9a5d8a43ac252291729f1870652 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 30 Jul 2016 20:40:01 +0200 Subject: [PATCH 50/57] [BAEL-178] Add test for mockUp. --- .../jmockit/AdvancedCollaboratorTest.java | 31 +++++++++++++++++++ 1 file changed, 31 insertions(+) create mode 100644 mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java new file mode 100644 index 000000000000..89e529f60577 --- /dev/null +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java @@ -0,0 +1,31 @@ +package org.baeldung.mocks.jmockit; + +import static org.junit.Assert.assertEquals; + +import org.junit.Test; +import org.junit.runner.RunWith; + +import mockit.Mock; +import mockit.MockUp; +import mockit.Tested; +import mockit.integration.junit4.JMockit; + +@RunWith(JMockit.class) +public class AdvancedCollaboratorTest { + + @Tested + private AdvancedCollaborator mock; + + @Test + public void testToMockUpPrivateMethod() { + new MockUp() { + @Mock + private String privateMethod() { + return "mocked: "; + } + }; + String res = mock.methodThatCallsPrivateMethod(1); + assertEquals("mocked: 1", res); + } + +} From 838419910042f8f1ce2f112fb908d8d000da9247 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sat, 30 Jul 2016 20:40:39 +0200 Subject: [PATCH 51/57] [BAEL-178] Add test for invoke method. --- .../baeldung/mocks/jmockit/AdvancedCollaboratorTest.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java index 89e529f60577..2295fe49d790 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java @@ -5,6 +5,7 @@ import org.junit.Test; import org.junit.runner.RunWith; +import mockit.Deencapsulation; import mockit.Mock; import mockit.MockUp; import mockit.Tested; @@ -28,4 +29,9 @@ private String privateMethod() { assertEquals("mocked: 1", res); } + @Test + public void testToCallPrivateMethodsDirectly(){ + Object value = Deencapsulation.invoke(mock, "privateMethod"); + assertEquals("default:", value); + } } From 8556fe542b373c6600d3f059f0e61a135f7689d3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 31 Jul 2016 01:34:46 +0200 Subject: [PATCH 52/57] [BAEL-178] Add constructors and tests for mockup for constructors. --- .../mocks/jmockit/AdvancedCollaborator.java | 4 ++++ .../mocks/jmockit/AdvancedCollaboratorTest.java | 15 ++++++++++++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java index 54abaaa96cc7..2022ceedc0d0 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java @@ -1,6 +1,10 @@ package org.baeldung.mocks.jmockit; public class AdvancedCollaborator { + public AdvancedCollaborator(){} + public AdvancedCollaborator(String string) throws Exception{ + i = string.length(); + } public String methodThatCallsPrivateMethod(int i){ return privateMethod() + i; } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java index 2295fe49d790..1eaa3d44a225 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java @@ -1,11 +1,12 @@ package org.baeldung.mocks.jmockit; -import static org.junit.Assert.assertEquals; +import static org.junit.Assert.*; import org.junit.Test; import org.junit.runner.RunWith; import mockit.Deencapsulation; +import mockit.Invocation; import mockit.Mock; import mockit.MockUp; import mockit.Tested; @@ -29,6 +30,18 @@ private String privateMethod() { assertEquals("mocked: 1", res); } + @Test + public void testToMockUpDifficultConstructor() throws Exception{ + new MockUp() { + @Mock + public void $init(Invocation invocation, String string) { + ((AdvancedCollaborator)invocation.getInvokedInstance()).i = 1; + } + }; + AdvancedCollaborator coll = new AdvancedCollaborator(null); + assertEquals(1, coll.i); + } + @Test public void testToCallPrivateMethodsDirectly(){ Object value = Deencapsulation.invoke(mock, "privateMethod"); From 21cfc694b188d60e3b5764441c33035cb5f25657 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 31 Jul 2016 01:35:41 +0200 Subject: [PATCH 53/57] [BAEL-178] Add private fields and more test for deencapsulation. --- .../mocks/jmockit/AdvancedCollaborator.java | 5 +++++ .../jmockit/AdvancedCollaboratorTest.java | 18 ++++++++++++++++++ 2 files changed, 23 insertions(+) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java index 2022ceedc0d0..00ad4ba5eb1f 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java @@ -1,6 +1,8 @@ package org.baeldung.mocks.jmockit; public class AdvancedCollaborator { + int i; + private int privateField = 5; public AdvancedCollaborator(){} public AdvancedCollaborator(String string) throws Exception{ i = string.length(); @@ -8,6 +10,9 @@ public AdvancedCollaborator(String string) throws Exception{ public String methodThatCallsPrivateMethod(int i){ return privateMethod() + i; } + public int methodThatReturnsThePrivateField(){ + return privateField; + } private String privateMethod(){ return "default:"; } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java index 1eaa3d44a225..5d7eb875bcab 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java @@ -47,4 +47,22 @@ public void testToCallPrivateMethodsDirectly(){ Object value = Deencapsulation.invoke(mock, "privateMethod"); assertEquals("default:", value); } + + @Test + public void testToSetPrivateFieldDirectly(){ + Deencapsulation.setField(mock, "privateField", 10); + assertEquals(10, mock.methodThatReturnsThePrivateField()); + } + + @Test + public void testToGetPrivateFieldDirectly(){ + int value = Deencapsulation.getField(mock, "privateField"); + assertEquals(5, value); + } + + @Test + public void testToCreateNewInstanceDirectly(){ + AdvancedCollaborator coll = Deencapsulation.newInstance(AdvancedCollaborator.class, "foo"); + assertEquals(3, coll.i); + } } From 79dfbd88188b2a8efd6e54283e8e50fc1d140e04 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 31 Jul 2016 01:36:01 +0200 Subject: [PATCH 54/57] [BAEL-178] Add inner class and test for instantiating inner classes. --- .../org/baeldung/mocks/jmockit/AdvancedCollaborator.java | 1 + .../baeldung/mocks/jmockit/AdvancedCollaboratorTest.java | 7 +++++++ 2 files changed, 8 insertions(+) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java index 00ad4ba5eb1f..4d25f466a6b4 100644 --- a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/AdvancedCollaborator.java @@ -16,4 +16,5 @@ public int methodThatReturnsThePrivateField(){ private String privateMethod(){ return "default:"; } + class InnerAdvancedCollaborator{} } diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java index 5d7eb875bcab..dd5f7bd62cc2 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java @@ -2,6 +2,7 @@ import static org.junit.Assert.*; +import org.baeldung.mocks.jmockit.AdvancedCollaborator.InnerAdvancedCollaborator; import org.junit.Test; import org.junit.runner.RunWith; @@ -65,4 +66,10 @@ public void testToCreateNewInstanceDirectly(){ AdvancedCollaborator coll = Deencapsulation.newInstance(AdvancedCollaborator.class, "foo"); assertEquals(3, coll.i); } + + @Test + public void testToCreateNewInnerClassInstanceDirectly(){ + InnerAdvancedCollaborator innerCollaborator = Deencapsulation.newInnerInstance(InnerAdvancedCollaborator.class, mock); + assertNotNull(innerCollaborator); + } } From 8c2b02a6767e970282004931acb7103d3628956e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 31 Jul 2016 17:46:55 +0200 Subject: [PATCH 55/57] [BAEL-178] Multimocks. --- .../jmockit/AdvancedCollaboratorTest.java | 65 ++++++++++++++----- 1 file changed, 50 insertions(+), 15 deletions(-) diff --git a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java index dd5f7bd62cc2..aaabe44f664f 100644 --- a/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java +++ b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/AdvancedCollaboratorTest.java @@ -1,23 +1,32 @@ package org.baeldung.mocks.jmockit; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertNotNull; + +import java.util.ArrayList; +import java.util.List; import org.baeldung.mocks.jmockit.AdvancedCollaborator.InnerAdvancedCollaborator; import org.junit.Test; import org.junit.runner.RunWith; import mockit.Deencapsulation; +import mockit.Expectations; import mockit.Invocation; import mockit.Mock; import mockit.MockUp; +import mockit.Mocked; import mockit.Tested; import mockit.integration.junit4.JMockit; @RunWith(JMockit.class) -public class AdvancedCollaboratorTest { +public class AdvancedCollaboratorTest & Comparable>> { @Tested private AdvancedCollaborator mock; + + @Mocked + private MultiMock multiMock; @Test public void testToMockUpPrivateMethod() { @@ -30,46 +39,72 @@ private String privateMethod() { String res = mock.methodThatCallsPrivateMethod(1); assertEquals("mocked: 1", res); } - + @Test - public void testToMockUpDifficultConstructor() throws Exception{ + public void testToMockUpDifficultConstructor() throws Exception { new MockUp() { @Mock public void $init(Invocation invocation, String string) { - ((AdvancedCollaborator)invocation.getInvokedInstance()).i = 1; + ((AdvancedCollaborator) invocation.getInvokedInstance()).i = 1; } }; AdvancedCollaborator coll = new AdvancedCollaborator(null); assertEquals(1, coll.i); } - + @Test - public void testToCallPrivateMethodsDirectly(){ + public void testToCallPrivateMethodsDirectly() { Object value = Deencapsulation.invoke(mock, "privateMethod"); assertEquals("default:", value); } - + @Test - public void testToSetPrivateFieldDirectly(){ + public void testToSetPrivateFieldDirectly() { Deencapsulation.setField(mock, "privateField", 10); assertEquals(10, mock.methodThatReturnsThePrivateField()); } - + @Test - public void testToGetPrivateFieldDirectly(){ + public void testToGetPrivateFieldDirectly() { int value = Deencapsulation.getField(mock, "privateField"); assertEquals(5, value); } - + @Test - public void testToCreateNewInstanceDirectly(){ + public void testToCreateNewInstanceDirectly() { AdvancedCollaborator coll = Deencapsulation.newInstance(AdvancedCollaborator.class, "foo"); assertEquals(3, coll.i); } - + @Test - public void testToCreateNewInnerClassInstanceDirectly(){ + public void testToCreateNewInnerClassInstanceDirectly() { InnerAdvancedCollaborator innerCollaborator = Deencapsulation.newInnerInstance(InnerAdvancedCollaborator.class, mock); assertNotNull(innerCollaborator); } + + @Test + @SuppressWarnings("unchecked") + public void testMultipleInterfacesWholeTest() { + new Expectations() { + { + multiMock.get(5); result = "foo"; + multiMock.compareTo((List) any); result = 0; + } + }; + assertEquals("foo", multiMock.get(5)); + assertEquals(0, multiMock.compareTo(new ArrayList<>())); + } + + @Test + @SuppressWarnings("unchecked") + public & Comparable>> void testMultipleInterfacesOneMethod(@Mocked M mock) { + new Expectations() { + { + mock.get(5); result = "foo"; + mock.compareTo((List) any); + result = 0; } + }; + assertEquals("foo", mock.get(5)); + assertEquals(0, mock.compareTo(new ArrayList<>())); + } } From 112876baf7a5a5e04f148515a959d856c33986b0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 31 Jul 2016 21:24:13 +0200 Subject: [PATCH 56/57] [BAEL-178] Add test for expectation reusing. --- .../baeldung/mocks/jmockit/ReusingTest.java | 57 +++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ReusingTest.java diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ReusingTest.java b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ReusingTest.java new file mode 100644 index 000000000000..729cb30cd26e --- /dev/null +++ b/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ReusingTest.java @@ -0,0 +1,57 @@ +package org.baeldung.mocks.jmockit; + +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; + +import mockit.Expectations; +import mockit.Injectable; +import mockit.Mocked; +import mockit.Tested; +import mockit.Verifications; +import mockit.integration.junit4.JMockit; + +@RunWith(JMockit.class) +public class ReusingTest { + + @Injectable + private Collaborator collaborator; + + @Mocked + private Model model; + + @Tested + private Performer performer; + + @Before + public void setup(){ + new Expectations(){{ + model.getInfo(); result = "foo"; minTimes = 0; + collaborator.collaborate("foo"); result = true; minTimes = 0; + }}; + } + + @Test + public void testWithSetup() { + performer.perform(model); + verifyTrueCalls(1); + } + + protected void verifyTrueCalls(int calls){ + new Verifications(){{ + collaborator.receive(true); times = calls; + }}; + } + + final class TrueCallsVerification extends Verifications{ + public TrueCallsVerification(int calls){ + collaborator.receive(true); times = calls; + } + } + + @Test + public void testWithFinalClass() { + performer.perform(model); + new TrueCallsVerification(1); + } +} From f532134304cf7a091872db5610aaf4e7db994df5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Fern=C3=A1ndez=20Gonz=C3=A1lez?= Date: Sun, 31 Jul 2016 22:16:02 +0200 Subject: [PATCH 57/57] [BAEL-178] Move test class to tests folders. --- .../java/org/baeldung/mocks/jmockit/ReusingTest.java | 0 1 file changed, 0 insertions(+), 0 deletions(-) rename mocks/jmockit/src/{main => test}/java/org/baeldung/mocks/jmockit/ReusingTest.java (100%) diff --git a/mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ReusingTest.java b/mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ReusingTest.java similarity index 100% rename from mocks/jmockit/src/main/java/org/baeldung/mocks/jmockit/ReusingTest.java rename to mocks/jmockit/src/test/java/org/baeldung/mocks/jmockit/ReusingTest.java