1

我正在设计测试用例JUnit。我的问题是如何保存任何声明为类变量并在测试中初始化的对象。目前在这种情况下,我得到java.lang.NullPointerException.

以下是简要说明-我列出了下面需要测试的三项服务-

  1. 服务 1(登录):它接受用户名密码对并返回 cookie 作为响应。
  2. 服务 2(postmessage):它接受一条消息,该消息必须在请求中提供 cookie,并返回已发布消息的唯一 id
  3. 服务 3(markasread):它接受一个消息 ID,它必须与 cookie 一起提供。应该在服务 3 中使用的消息 ID 由服务 2 返回。

这就是我所期望的工作-

import static org.junit.Assert.*;
import org.junit.Test;

public class ProfileTest{
    private String cookie;
    private String messageId;

    @Test
    public void loginTest(){
        String username = "demouser";
        String password = "demopassword";

        HttpResponse response = login(username, password);
        cookie = response.getCookie();

        assertEquals(response.getResponse(), "success");
    }

    @Test
    public void postmessageTest(){
        String message = "Hi, this is test message";
        HttpResponse response = postmessage(message, cookie);
        messageId = response.getCookie();

        assertEquals(response.getResponse(), "success");
    }

    @Test
    public void markasreadTest(){
        HttpResponse response = markasread(messageId, cookie);

        assertEquals(response.getResponse(), "success");
    }
}
4

2 回答 2

2

答案是你不能,也不应该这样做。每次运行测试用例都会有自己的类变量副本。这背后的想法只是每个测试用例应该独立运行,而不应该相互依赖。

通过一些垃圾代码可能是可能的,但我真的没有这样的建议给你。

如果可能,请尝试将 tescase 组合在一起并单独运行。

于 2013-08-08T09:15:45.943 回答
1

你不能这样做的原因是 BlockJUnit4ClassRunner 为每个叶子方法创建了一个测试类的新实例。它使用默认构造函数构造测试类。

BlockJUnit4ClassRunner

相关代码是

protected Object createTest() throws Exception {
    return getTestClass().getOnlyConstructor().newInstance();
}
于 2013-08-08T09:19:42.263 回答