我正在运行一个带有注释的方法,@Test
并且我想获得对该对象的引用JunitCore
,该对象通过反射调用该方法。
如果可能,我如何获得对该对象的引用?(可能是安全问题)
我试过了reflection
,classLoader
但我无法让它工作。
谢谢
这JUnitCore
是Junit
测试的基本入口点。它的工作方式是找到一个List
作为java
命令参数提供的类,并使用它们创建一个Runner
运行测试用例的类。
在处理过程中,该main
方法JUnitCore
永远不会将JUnitCore
它创建的实例的引用传递给任何其他对象。因此,它既不能直接检索,也不能通过反射检索。
JUnitCore
如下
public static void main(String... args) {
runMainAndExit(new RealSystem(), args);
}
public static void runMainAndExit(JUnitSystem system, String... args) {
Result result= new JUnitCore().runMain(system, args);
system.exit(result.wasSuccessful() ? 0 : 1);
}
public Result runMain(JUnitSystem system, String... args) {
system.out().println("JUnit version " + Version.id());
List<Class<?>> classes= new ArrayList<Class<?>>();
List<Failure> missingClasses= new ArrayList<Failure>();
for (String each : args)
try {
classes.add(Class.forName(each));
} catch (ClassNotFoundException e) {
system.out().println("Could not find class: " + each);
Description description= Description.createSuiteDescription(each);
Failure failure= new Failure(description, e);
missingClasses.add(failure);
}
RunListener listener= new TextListener(system);
addListener(listener);
Result result= run(classes.toArray(new Class[0]));
for (Failure each : missingClasses)
result.getFailures().add(each);
return result;
}
... // and more
在这个实现中没有一个引用this
作为参数传递。因此,您无法获得对它的引用。
唯一的方法是创建一个JunitCore
实例并自己运行测试:
JUnitCore junit = new JUnitCore();
//we can add a listener to listen for events as we run the tests
junit.addListener(new RunListener(){
@Override
public void testFailure(Failure failure) throws Exception {
System.out.println("failed " + failure);
}
});
Result result = junit.run(Class.forName(nameOfTestSuite));