如何为createNewToken方法编写测试方法?

时间:2018-04-25 07:40:29

标签: java unit-testing junit mockito

我是这个Mockito J-Unit测试的新手,我想测试我的createNewToken() - 方法,但我无法理解它的逻辑。

这是我的方法:

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);
        }
    }
}

1 个答案:

答案 0 :(得分:1)

正如我所看到的,您的方法的主要部分适用于Hibernate EntityManager。所以你应该测试这个部分,或者如果可能的话嘲笑它。

你也可以模拟getTokenByUserToken(userToket)。在这里你可以写几个案例。

所以可能的测试用例:

  • getTokenByUserToken(usertoken)返回null。因此,您的方法会创建新的令牌并将令牌持久保存到DB。断言em.createQuery("select token t....")。在此处验证新令牌是否仍然存在于DB
  • getTokenByUserToken(usertoken)返回未在DB令牌中保留。当EntityManager尝试删除此令牌时,您可以在此处获得异常。这是一种很好的方法,可以在代码中正确处理一些例外情况
  • getTokenByUserToken(usertoken)返回现有令牌(例如,您可以在此测试之前将其插入数据库)。在这里,您将测试删除现有令牌并创建新令牌。