java - 使用实例而不是类运行 JUnitCore

标签 java junit4

我希望以编程方式运行JUnit 4.12+,粗略搜索后发现(在许多其他类似的帖子中)this answer ,它规定了以下基本解决方案:

@RunWith(Suite)
@Suite.SuiteClasses ({
    MyTestClass1.class,
    MyTestClass2.class
})
public class MyTestSuite {
}

Result testResults = JUnitCore.runClasses(MyTestSuite.class);

...我毫不费力就能让这个工作正常进行。到目前为止一切顺利!

问题是:我有一些非常复杂的测试类,需要在运行时用非常具体的属性进行实例化/注入(inject)......这不是可以从无参数构造函数内部完成的事情。但是上述方法(指定仅运行一组类的任何旧实例)不允许您实例化测试类、配置它们,然后然后运行它们.

有办法做到这一点吗?我在 JUnit API 上找不到任何内容。我正在寻找类似的东西:

MyTestClass1 mtc1 = new MyTestClass1(...);
MyTestClass2 mtc2 = new MyTestClass2(...);
Result testResults = JUnitCore.run(mtc1, mtc2);

最佳答案

您可能需要自定义运行者来实现这一目标。 Junit 4/5 附带了第三方运行器,可以为构造函数和方法执行依赖注入(inject)。如果您使用 Spring,那么非常流行的运行器是 Mockito(MockitoJUnitRunner) 和 SpringJUnit4ClassRunner。您可以在以下位置查看自定义运行器和实现详细信息: https://github.com/junit-team/junit4/wiki/Custom-runners

关于java - 使用实例而不是类运行 JUnitCore,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47577439/

相关文章:

spring - 构建期间 jUnit 中出现多个嵌入式 HSQLDB 数据库错误

java - Junit 测试,不会在 ArrayList 返回类型方法处停止运行

junit - Junit 4 中的 @parameters

java - ModelClass.class.getDeclaredFields().length 在 Gradle Build 期间返回 4 但有 3 个声明的属性

java - 没有默认构造函数和私有(private)方法的抽象类的测试类?

java - 首次运行时 HttpURLConnection 由对等方重置...可立即重新运行

java - 将 JAR Maven 项目包含到 WAR Maven 项目中

java - 在 JavaFX 中生成子窗口

java - 使用java将文件夹存储在文件中

java - 为通用队列类创建 toString() 方法时出现逻辑错误