dependencies
<dependency>
<groupId>org.assertj</groupId>
<artifactId>assertj-core</artifactId>
<version>3.21.0</version>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>4.8.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter-engine</artifactId>
<version>5.5.2</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.mockito</groupId>
<artifactId>mockito-all</artifactId>
<version>1.10.19</version>
<scope>test</scope>
</dependency>
test
@Before
public void setUp() {
System.out.println("Test is loading...");
}
@Test
public void test() {
System.out.println("Testing...");
}
@After
public void after() {
System.out.println("Test execution is complete.");
}
mock和spy
// mock对象执行的方法结果都是null
UserService service = mock(UserService.class);
// spy对象执行的方法都是真实调用
UserService service = new UserService();
service = spy(service);
when
// 作用于mock对象
when(service.getUser("张三"))
.thenReturn(new User("张三"));
when(service.getUser("张三"))
.thenThrow(new RuntimeException("User is not found."));
// 作用于spy对象
doReturn(new User("张三"))
.when(service)
.getUser("张三");
doThrow(new RuntimeException("User is not found."))
.when(service)
.getUser("张三");
assert
Throwable throwable = assertThrows(RuntimeException.class, () -> service.getUser("张三"));
assertThat(throwable).hasMessageContaining("User is not found.")
assertEquals(service.getUser("张三"), new User("张三"));
verify
verify(service, times(1))
.getUser("张三");
verify(service, never())
.getUser("李四");
captor
ArgumentCaptor<String> captor = ArgumentCaptor.forClass(String.class);
verify(service)
.getUser(captor.capture());
assertEquals(captor.getValue(), "张三");
doAnswer
// 在service.addUser(user)执行的时候,捕获入参0号位置,设置value,id = 1L
doAnswer(
invocation -> {
ReflectionTestUtils.setField((User) invocation.getArgument(0), "id", 1L);
return null;
})
.when(service)
.addUser(user);