我是此Mockito J -Unit测试的新手,我想测试我的createNewToken()
-Method,但我无法理解它的逻辑。
这是我的方法:
public String createNewToken(String usertoken) {
WebToken oldToken = getTokenByUserToken(usertoken);
if (!Assert.isNull(oldToken)) {
em.remove(oldToken);
}
WebToken webToken = new WebToken();
webToken.setToken(UUID.randomUUID().toString());
webToken.setUserToken(usertoken);
em.persist(webToken);
return webToken.getToken();
}
这是我的测试方法,但我确定这是错误的:
@RunWith(Enclosed.class)
public class WebTokenPSTest extends AbstractPersistenceTest {
@InjectMocks
WebTokenPS cut;
@RunWith(MockitoJUnitRunner.class)
public static class createNewToken extends WebTokenPSTest {
@Test
public void happyPath() {
String token = cut.createNewToken("token");
String result = token;
assertThat(result).isEqualTo(token);
}
}
}
您可以看到,方法的主要部分与Hibernate EntityManager一起使用。因此,您应该测试此部分,或在可能的情况下模拟。
您也可以嘲笑GetTokenByusertoken(UserToket(。在这里,您可以写几种情况。
因此可能的测试用例:
- getTokenbyusertoken(Usertoken(返回null。因此,您的方法会创建新的令牌并将其持续到DB。断言
em.createQuery("select token t....")
。在这里,您可以验证新的令牌持续到DB - getTokenbyusertoken(Usertoken(返回不在DB令牌中。当EntityManager试图删除此令牌时,您可以期待异常。这是一个很好的方法,在代码中未正确处理一些例外情况
- getTokenByUserToken(UserToken(返回现有的令牌(例如,您可以在此测试之前将其插入DB(。在这里,您可以测试删除现有令牌并创建新令牌。