got*_*otj 0 java testing junit unit-testing arraylist
所以我有两段Java代码。一个是一小段简单的源代码,另一个是我试图弄乱的 JUnit 测试类。但是,每当我想要调试代码以确保这个简单的代码正确显示时,我都会在 java.util.ArrayList.forEach(ArrayList.java:1507) 错误处收到 NullPointerException。
这是我的源代码:
public class sourceCode {
public int mid(int x, int y, int z) {
int m = z;
if (y < z) {
if (x < y) {
m = y;
}
else if (x < z) {
m = x;
}
}
else {
if (x > y) {
m = y;
}
else if (x > z) {
m = x;
}
}
return m;
}
Run Code Online (Sandbox Code Playgroud)
}
这是我的 JUnit 测试用例代码:
import static org.junit.jupiter.api.Assertions.*;
import org.junit.Before;
import org.junit.jupiter.api.Test;
public class sourceCodeTest {
public sourceCode sourceCodeVar;
//Test Fixture
@Before
public void setUpBeforeClass() throws Exception {
sourceCodeVar = new sourceCode();
}
@Test
void test() {
//Test Oracle
int oracle = 2;
//Test Case
int middleTest1 = sourceCodeVar.mid(1, 2, 3);
assertEquals(oracle, middleTest1);
}
}
Run Code Online (Sandbox Code Playgroud)
发现
它们都是同一目录下的不同文件,它们也是在 Eclipse 的项目中创建的。我在另一个稍微相关的线程中看到它可能是与 Eclipse 相关的错误,但是在 VS Code 上测试它时,出现了相同的错误,这表明这是我的错误。
我想我如此困惑的原因是代码似乎太简单了,我无法确定我搞砸的地方。
您似乎在测试代码中混合了JUnit-4和JUnit-5 。
\n\nimport org.junit.Before; // <- Junit-4 annotation\nimport org.junit.jupiter.api.Test; // <- Junit-5 annotation\nRun Code Online (Sandbox Code Playgroud)\n\n当您用于Junit-5测试时,最好使用所有Junit-5注释。替换@Before为org.junit.jupiter.api.BeforeEach-> @BeforeEach。
你的代码应该是这样的:
\n\nimport static org.junit.jupiter.api.Assertions.*;\nimport org.junit.jupiter.api.BeforeEach;\nimport org.junit.jupiter.api.Test;\n\npublic class sourceCodeTest {\n public sourceCode sourceCodeVar;\n\n // change:\n @BeforeEach\n public void setUpBeforeClass() throws Exception {\n sourceCodeVar = new sourceCode();\n }\n\n @Test\n void test() {\n //Test Oracle\n int oracle = 2;\n //Test Case\n int middleTest1 = sourceCodeVar.mid(1, 2, 3);\n assertEquals(oracle, middleTest1);\n }\n\n}\nRun Code Online (Sandbox Code Playgroud)\n\n有关更多信息,请查看此文档:
\n\n\n\n@BeforeEach
\n\n表示被注解的方法应该在当前类中的每个@Test、@RepeatedTest、@ParameterizedTest或@TestFactory方法之前执行;类似于 JUnit 4\xe2\x80\x99s @Before。除非重写这些方法,否则它们是继承的。
\n