JUnit中setUp未创建对象,testManuscript报NullPointerException如何解决?
为什么运行测试时testManuscript会出现NullPointerException?
问题根源
你在测试类中混合使用了JUnit 4的@Before注解和JUnit 5的@Test注解。JUnit 5(Jupiter)不会识别JUnit 4的生命周期注解,导致setUp()方法完全没有被执行,testManuscript静态变量始终为null,调用它的setMSid()方法时自然抛出空指针异常。
修复方案
方案1:统一使用JUnit 5注解
将@Before替换为JUnit 5的@BeforeEach,同时调整导入路径为org.junit.jupiter.api.BeforeEach;另外静态变量没必要设置为静态,改为实例变量更合理,同时字符串比较建议用equals()替代==(==比较的是引用地址,而非内容):
package org.lhoffjann; import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import static org.junit.jupiter.api.Assertions.assertTrue; public class ManuscriptTest { private Manuscript testManuscript; @BeforeEach public void setUp(){ testManuscript = new Manuscript(); } @Test public void testGetMSid() { testManuscript.setMSid("1234"); assertTrue("1234".equals(testManuscript.getMSid())); } }
方案2:统一使用JUnit 4注解
如果要继续使用JUnit 4,将@Test替换为JUnit 4的org.junit.Test,并确保所有注解和断言都来自JUnit 4:
package org.lhoffjann; import org.junit.Before; import org.junit.Test; import static org.junit.Assert.assertTrue; public class ManuscriptTest { private static Manuscript testManuscript; @Before public void setUp(){ testManuscript = new Manuscript(); } @Test public void testGetMSid() { testManuscript.setMSid("1234"); assertTrue("1234".equals(testManuscript.getMSid())); } }
内容的提问来源于stack exchange,提问作者Lennart
相关产品推荐
相关产品推荐

