我希望以编程方式运行JUnit 4.12+,粗略搜索这样做产生了(在许多其他类似帖子中)这个答案,它规定了以下基本解决方案:
@RunWith(Suite)
@Suite.SuiteClasses ({
MyTestClass1.class,
MyTestClass2.class
})
public class MyTestSuite {
}
Result testResults = JUnitCore.runClasses(MyTestSuite.class);
......我能够让它工作,没有汗水。到现在为止还挺好!
问题是:我有一些非常复杂的测试类,需要在运行时实例化/注入非常具体的属性......不是可以从无参数构造函数内部完成的事情。但是上述方法(指定只运行一组类的任何旧实例)不允许您实例化测试类,配置它们,然后运行它们。
有没有办法做到这一点?我在JUnit API 上找不到任何东西。我正在寻找类似的东西:
MyTestClass1 mtc1 = new MyTestClass1(...);
MyTestClass2 mtc2 = new MyTestClass2(...);
Result testResults = JUnitCore.run(mtc1, mtc2);
我使用自定义Runner
示例(Groovy 伪代码)进行了处理,如下所示:
class MyRunner extends Runner {
@Override
Description getDescription() {
return null
}
@Override
void run(RunNotifier notifier) {
// LoginTests.class is a test class I want to run
LoginTests loginTests = new LoginTests(<my args here>)
Description description = Description.createSuiteDescription(LoginTests)
notifier.fireTestStarted(description)
try {
log.info("About to doSomething()...")
loginTests.doSomething()
log.info("Did it...")
notifier.fireTestFinished(description)
} catch(Throwable throwable) {
log.info("doSomething() failed...")
notifier.fireTestAssumptionFailed(new Failure(description, throwable))
}
}
}
Result testResults = new JUnitCore().run(Request.runner(new MyRunner()))
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句