Junit 测试在 Netbeans 11.3 IDE "Could not find or load main class"中失败



我刚刚在运行JDK 14的Windows 10上安装了Netbeans 11.3。我试图按照 https://netbeans.apache.org/kb/docs/java/javase-intro.html 提供的简单的 10 分钟学习教程进行操作,只是为了让我的脚湿透。一切正常,直到我到达"创建JUnits测试"下的部分。IDE 在为 JUnit 测试类生成代码方面做得很好,但是,测试失败并出现Could not find or load main class错误。下面是输出窗口中的堆栈跟踪:

compile-test:
Created dir: C:Users....DocumentsNetBeansProjectsMyLibbuildtestresults
Testsuite: org.me.mylib.LibClassTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0.152 sec
Testcase: initializationError(org.me.mylib.LibClassTest):   Caused an ERROR
No runnable methods
java.lang.Exception: No runnable methods
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
at java.base/jdk.internal.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62)
at java.base/jdk.internal.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:500)
at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:481)

Test org.me.mylib.LibClassTest FAILED
The exception seems to take place during the test initialization, internal to the JUnit framework.

下面是 IDE 根据教程示例生成的测试类(来自文件 LibClassTest.java 中的 LibClassTest(的代码:

package org.me.mylib;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.AfterAll;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.BeforeAll;
import org.junit.jupiter.api.Test;
import static org.junit.jupiter.api.Assertions.*;
/**
* @author hrh74
*/
public class LibClassTest {
public LibClassTest() {
System.out.println("Creating LibClassTest");
}
@BeforeAll
public static void setUpClass() {
}
@AfterAll
public static void tearDownClass() {
}
@BeforeEach
public void setUp() {
}
@AfterEach
public void tearDown() {
}
/**
* Test of acrostic method, of class LibClass.
*/
@Test
public void testAcrostic() {
System.err.println("Running testAcrostic...");
String result = LibClass.acrostic(new String[]{"fnord", "polly", "tropism"});
assertEquals("Correct value", "foo", result);
}
}

下面是 JUnit 根据教程示例测试的类的代码:

package org.me.mylib;
/**
*
* @author hrh74
*/
public class LibClass {
public static String acrostic(String[] args) {
StringBuffer b = new StringBuffer();
for (int i = 0; i < args.length; i++) {
if (args[i].length() > i) {
b.append(args[i].charAt(i));
} else {
b.append('?');
}
}
System.out.println("The content of the buffer " + b);
return b.toString();
}
}

任何见解都会很棒。

提前谢谢。

好吧,事实证明,Netbeans 11.3 中假定的"JUnit 5"功能不起作用。Netbeans 邮件列表的支持能够重现该错误。解决方案是更改测试类。具有 org.junit.jupiter 的导入语句应替换为其相应的 org.junit 语句。此外,JUnit 5 注释需要更改为相应的旧版本。这是一个工作示例:

package org.me.mylib;
import org.junit.After;
import org.junit.AfterClass;
import org.junit.Before;
import org.junit.BeforeClass;
import org.junit.Test;
import static org.junit.Assert.*;
public class LibClassTest {
public LibClassTest() {
}
@BeforeClass
public static void setUpClass() {
}
@AfterClass
public static void tearDownClass() {
}
@Before
public void setUp() {
}
@After
public void tearDown() {
}
@Test
public void testAcrostic() {
System.err.println("Running testAcrostic...");
String result = LibClass.acrostic(new String[]{"fnord", "polly", "tropism"});
assertEquals("Correct value", "foo", result);
}
}

相关内容

最新更新