Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/333.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写createNewToken方法的测试方法?_Java_Unit Testing_Junit_Mockito - Fatal编程技术网

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

Java 如何编写createNewToken方法的测试方法?,java,unit-testing,junit,mockito,Java,Unit Testing,Junit,Mockito,我是这个Mockito J单元测试的新手,我想测试我的createNewToken()-方法,但我不能理解它的逻辑 这是我的方法: public String createNewToken(String usertoken) { WebToken oldToken = getTokenByUserToken(usertoken); if (!Assert.isNull(oldToken)) { em.remove(oldToken); } WebT

我是这个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);
        }
    }
}

t如我所见,您的方法的主要部分与Hibernate EntityManager一起工作。所以你应该测试这个部分,或者如果可能的话模拟它

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

因此,可能的测试用例:

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