TestNG Mockito示例
时间:2020-02-23 14:41:57 来源:igfitidea点击:
在Mockito教程中,我们使用JUnit运行测试用例。
Mockito框架也可以与其他Java测试框架结合。
在本教程中,我们将把Mockito模拟框架与TestNG测试框架集成在一起。
TestNG Mockito
我们将重用Mockito教程中创建的类,并在TestNG中为其编写测试用例。
您可以从我们的GitHub存储库下载完整的代码,以检查这些类。
为简单起见,我们有以下程序。
AddService接口和AddServiceImpl实现类。
CalcService是依赖于AddService的服务类。
我们的目标是测试CalcService类方法,因此我们将使用Mockito而不是创建其实例来模拟AddService。
TestNG Mockito模拟()示例
让我们看一下TestNG测试类,其中我们将使用Mockito.mock()
方法来模拟AddService
。
package com.theitroad.mockito.testng; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import org.mockito.Mockito; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.theitroad.AddService; import com.theitroad.CalcService; public class TestNGMockitoExample { @Test(dataProvider = "dp") public void test_mock_object(int i, int j) { System.out.println("**--- Test testCalc executed ---**"); AddService addService; CalcService calcService; addService = Mockito.mock(AddService.class); calcService = new CalcService(addService); int expected = i + j; when(addService.add(i, j)).thenReturn(expected); int actual = calcService.calc(i, j); assertEquals(expected, actual); } @DataProvider public Object[][] dp() { return new Object[][] { new Object[] { 1, 1 }, new Object[] { 2, 2 }, }; } }
这是从Eclipse执行上述TestNG测试类时的输出。
如果要通过maven命令行执行TestNG测试类,则将以下依赖项添加到maven-surefire-plugin
中。
<dependency> <groupId>org.apache.maven.surefire</groupId> <artifactId>surefire-testng</artifactId> <version>2.22.0</version> </dependency>
您可以从我们的GitHub项目存储库中检出完整的pom.xml文件代码。
TestNG Mockito @Mock注释示例
我们还可以使用@Mock批注将模拟对象注入TestNG测试,只需确保在@ BeforeMethod方法中调用MockitoAnnotations.initMocks(this)
,以便Mockito将初始化模拟对象。
package com.theitroad.mockito.testng; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import org.mockito.Mock; import org.mockito.MockitoAnnotations; import org.testng.annotations.BeforeMethod; import org.testng.annotations.DataProvider; import org.testng.annotations.Test; import com.theitroad.AddService; import com.theitroad.CalcService; public class TestNGMockAnnotationExample { CalcService calcService; @Mock private AddService addService; @BeforeMethod public void setup() { System.out.println("@BeforeMethod TestNGMockAnnotationExample"); MockitoAnnotations.initMocks(this); } @Test(dataProvider = "dp") public void test_mock_annotation(int i, int j) { System.out.println("**--- Test testCalc executed ---**"); calcService = new CalcService(addService); int expected = i + j; when(addService.add(i, j)).thenReturn(expected); int actual = calcService.calc(i, j); assertEquals(expected, actual); } @DataProvider public Object[][] dp() { return new Object[][] { new Object[] { 1, 1 }, new Object[] { 2, 2 }, }; } }
TestNG模拟混凝土程序
我们可以模拟一个具体的类,并为特定操作指定行为。
让我们模拟ArrayList并对其一些操作进行存根。
package com.theitroad.mockito.testng; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; import static org.testng.Assert.assertEquals; import java.util.ArrayList; import org.testng.annotations.Test; public class TestNGMockitoSingleElement { @SuppressWarnings("unchecked") @Test public void mock_concrete_class() { ArrayList<String> mockedList = mock(ArrayList.class); when(mockedList.get(0)).thenReturn("first-element"); System.out.println(mockedList.get(0)); assertEquals("first-element", mockedList.get(0)); //"null" gets printed as get(1) is not stubbed System.out.println(mockedList.get(1)); } }
TestNG Mockito Spy示例
package com.theitroad.mockito.testng; import static org.testng.Assert.assertEquals; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import java.util.ArrayList; import java.util.List; import org.testng.annotations.Test; public class TestNGMockitoSpyExample { @Test public void test_mockito_spy() { List<String> list = new ArrayList<>(); List<String> listSpy = spy(list); listSpy.add("first-element"); System.out.println(listSpy.get(0)); assertEquals("first-element", listSpy.get(0)); when(listSpy.get(0)).thenReturn("second-element"); System.out.println(listSpy.get(0)); assertEquals("second-element", listSpy.get(0)); //call the real method on Spied object since it's not stubbed assertEquals(1, listSpy.size()); } }
TestNG Mockito verify()示例
package com.theitroad.mockito.testng; import static org.mockito.Mockito.verify; import java.util.List; import org.mockito.Mockito; import org.mockito.internal.verification.VerificationModeFactory; import org.testng.annotations.Test; public class TestNGMockitoVerify { @Test public void test_mockito_verify() { @SuppressWarnings("unchecked") List<String> mockedList = Mockito.mock(List.class); mockedList.add("first-element"); mockedList.add("second-element"); mockedList.add("third-element"); mockedList.add("third-element"); mockedList.clear(); verify(mockedList).add("first-element"); verify(mockedList).add("second-element"); verify(mockedList, VerificationModeFactory.times(2)).add("third-element"); verify(mockedList).clear(); } }