代码之家  ›  专栏  ›  技术社区  ›  Mert Yücel

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

  •  0
  • Mert Yücel  · 技术社区  · 6 年前

    我是Mockito J单元测试的新手,我想测试我的 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 回复  |  直到 6 年前
        1
  •  1
  •   Danila Zharenkov    6 年前

    t如我所见,您的方法的主要部分与Hibernate EntityManager配合使用。因此,您应该测试这个部分,或者如果可能的话模拟它。

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

    因此,可能的测试用例:

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