JUnit setUp 不创建对象

1 java junit

为什么我在尝试运行测试时会得到“ NullPointerExeptionfor” ?testManuscript

这是我的 Manuscript.java:

package org.lhoffjann;


public class Manuscript {
private String msID;
private String path;
    public void setMSid(String msID){
        this.msID = msID;
    }

    public String getMSid() {
        return this.msID;
    }
}
Run Code Online (Sandbox Code Playgroud)

这是我的 ManuscriptTest.java:

package org.lhoffjann;

import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.assertTrue;

public class ManuscriptTest {
    private static Manuscript testManuscript;

    @Before
    public void setUp(){
        testManuscript = new Manuscript();
    }
    @Test
    public void testGetMSid() {
        testManuscript.setMSid("1234");
        assertTrue("1234" == testManuscript.getMSid());
    }
}
Run Code Online (Sandbox Code Playgroud)

Mar*_*eel 5

您已从 JUnit 5 导入@Test,但从 JUnit 4 使用时@Before,该组合不起作用。您需要选择要使用的 JUnit 版本(4 或 5),然后一致地从该 JUnit 版本导入类。我建议使用 JUnit 5,并从类路径中删除所有 JUnit 4 依赖项,或者至少将您的 IDE 配置为不建议进行这些导入。

对于这种特定情况,将@Before( org.junit.Before) 替换为@BeforeEach( org.junit.jupiter.api.BeforeEach)。

在所示的示例中,您甚至不需要此setUp方法,因为每个测试执行都会获取自己的测试类实例。您可以使用:

private Manuscript testManuscript = new Manuscript();
Run Code Online (Sandbox Code Playgroud)

即remove static,直接初始化字段,removesetUp方法。

即使您继续使用该setUp方法,我建议删除statictestManuscript实例字段也是如此,就像实际使用的一样。