如果作为测试套件的一部分运行,则JUnit测试失败

时间:2014-12-02 17:21:57

标签: java junit javafx

我有一个测试类,它有几个测试并且全部通过。 如果我将类添加到测试套件中,则所有测试都会失败。

原因是无法解析对JavaFX类型的依赖性。我使用初始化JavaFX框架的test rule(例如应用程序线程等),这似乎正常,因为传递的测试表明。 测试由于例外而失败:

java.lang.NoClassDefFoundError: Could not initialize class javafx.scene.control.Label

为什么JUnit的行为会有所不同,具体取决于我如何运行测试?我怎样才能解决这个问题? 请注意,这并不是特别的GUI测试(我不想模拟用户操作或类似的东西,更多的是关于如何通过我的代码在内部创建和管理某些控件)。

测试套件:

@RunWith(Suite.class)
@SuiteClasses({ 
    TestClass.class
})

public class TestSuite {

}

1 个答案:

答案 0 :(得分:0)

您可能正在Java 7下运行测试套件(您需要手动将JavaFX运行时添加到类路径中)。

我建议在Oracle Java 8的最小Java版本上进行所有JavaFX开发(其中所有JavaFX工具包将自动位于默认类路径上)。

有关详情,请参阅答案:Compile code using JavaFX 2.0

  

System.getProperty(" java.version")返回1.8.0_25,即版本应该不是问题。

也可能是您正在使用OpenJDK构建而不是Oracle JDK构建(因为大多数OpenJDK实现目前不包括JavaFX)。

一个可能的问题是,您的测试套件使用的是与默认类加载器不同的类加载器,并且测试套件使用的类加载器不包含JavaFX运行时类(在Java 8中位于{{ 1}})。

如果您愿意,可以编辑您的问题以包含MCVE,以便有人可以复制您的问题。