从Eclipse运行JUnit测试会产生ClassNotFound错误

时间:2012-09-10 12:58:31

标签: eclipse maven-2 junit4 m2eclipse

我正在尝试从Eclipse运行JUnit测试,但在运行这些测试时,我得到ClassNotFound异常

完成堆栈跟踪如下:

  

java.lang.NoClassDefFoundError:of   引起:java.lang.ClassNotFoundException:of       在java.net.URLClassLoader $ 1.run(URLClassLoader.java:202)       at java.security.AccessController.doPrivileged(Native Method)       在java.net.URLClassLoader.findClass(URLClassLoader.java:190)       at java.lang.ClassLoader.loadClass(ClassLoader.java:307)       在sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:301)       在java.lang.ClassLoader.loadClass(ClassLoader.java:248)   线程“main”中的异常

我已经搜索了谷歌,并发现有几个人面临这个问题,但他们似乎都没有解决我的问题。这可能是由于平台的差异

我的开发平台如下

OS: Windows XP
Eclipse JUNO
JUnit4
Maven2

同时,如果我使用maven运行这个项目,它运行得非常好。

对我来说最奇怪的部分是抛出ClassNotFound异常的类的名称。该课程的名称为of

这让我完全感到震惊。

此外,我上面列出的堆栈跟踪,就是我得到错误时所得到的所有内容。

我已经被困在这个问题上2天了,任何帮助将不胜感激。

9 个答案:

答案 0 :(得分:11)

我尝试了这里和其他帖子中提到的所有内容。人们提供的一些解决方案是:

  1. 更改测试的输出文件夹
  2. 为将从Maven运行test-compile的项目创建自定义构建器
  3. 在项目构建路径
  4. 的“订单和导出”列表中将Maven依赖项移到更高位置

    还有很多很多,但我找到的工作方式如下:关闭开发环境。从我的本地Maven存储库中删除项目使用的jar。打开IDE。建立项目。运行测试。

    经过几个小时的敲击我的键盘并遵循建议的解决方案,这一个工作!如果这不起作用,您可以尝试搜索我上面列出的解决方案。

答案 1 :(得分:7)

在Eclipse中右键单击项目名称并选择“Maven - > update project”通常可以解决此问题。

答案 2 :(得分:1)

我知道这个问题已经得到解答,但我仍然会在这里分享我的解决方案,

  1. 确保'src / test / java'的输出文件夹已设置为'target / test-classes',这在许多其他帖子中已有说明,所以我在此不再重复。

  2. 如果它仍然不起作用,则很可能在编译单元测试类时出现错误。去'窗口' - >打开“错误日志”视图,您应该能够看到错误消息的详细信息。

  3. 对于我的情况,之前下载的依赖jar由于网络问题而以某种方式损坏,因此只需从本地存储库中删除jar并使用'maven' - > '更新配置'再次下载。

    然后一切正常!

答案 3 :(得分:1)

通常在我们构建时,检查“运行配置选项卡”中的“跳过测试”,而不是取消选中“跳过测试”并构建项目,junits应该可以正常工作。这个解决方案对我有用。 Run configuration tab for building project

答案 4 :(得分:0)

尝试在eclipse中将透视切换到JUnit并再次运行测试

答案 5 :(得分:0)

尽管我看到了所有答案和其他帖子。我将总结一下我的努力:

这个项目的配置可能不适合同一工作区中的其他项目。 (如何解决这个问题可能是另一个问题)

因此,关闭此工作区,仅为此项目启动一个干净的工作区。

答案 6 :(得分:0)

面临同样的问题。这个简单的步骤为我解决了它。

  1. 从项目的构建路径中删除JUnit并重新添加。

  2. 如果设置为 自动构建 ,您的工作区将再次构建。如果未设置为自动构建,则构建您的项目。你的问题应该解决了。

答案 7 :(得分:0)

您应该添加您使用的类(例如spring-boot):

@RunWith(SpringRunner.class)
@SpringBootTest(classes = {DataPoint.class})
public class DataPointTest {

    @Test
    public void TestBuilder() {
        DataPoint.Builder builder = new DataPoint.Builder();

        DataPoint dataPoint = builder.withCount(4).withFirst(1).build();

        assert dataPoint.getCount() == 4 && dataPoint.getFirst() == 1;
    }

}

答案 8 :(得分:0)

您还可以在POM.xml中查看信息

我有同样的问题。设置代码时,我的项目名称不匹配。

<groupId>CucumberTest</groupId>
<artifactId>com.ProjectName</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>

<name>com.ProjectName</name>
<url>http://maven.apache.org</url>

在POM.xml中更改项目名称后,它工作正常。