由於要代碼中使用了 Date 類生成實時時間,單元測試中需要 Mock Date 的構造方法,以預設其行為,這就要使用到 PowerMock
在 Spring Boot 的測試套件中,需要添加 @RunWith(SpringRunner.class) 和 @SpringBootTest 注解。
但是 PowerMock 需要添加 @RunWith(PowerMockRunner.class) 注解。
@RunWith 注解只能有一個,解決方案是使用 @PowerMockRunnerDelegate 注解,同時使用 @PowerMockIgnore 注解避免報錯:
@RunWith(PowerMockRunner.class) @PowerMockRunnerDelegate(SpringRunner.class) @PowerMockIgnore({"javax.management.*", "javax.net.ssl.*"}) @PrepareForTest({UsersService.class, Date.class}) @SpringBootTest @Transactional //@Rollback(false) public class UsersServiceTest {
private Date date;
@Before
public void setUp() throws Exception {
PowerMockito.mock(Date.class);
PowerMockito.whenNew(Date.class).withNoArguments().thenReturn(date);
}
}