0

我正在运行一个带有注释的方法,@Test并且我想获得对该对象的引用JunitCore,该对象通过反射调用该方法。

如果可能,我如何获得对该对象的引用?(可能是安全问题)

我试过了reflectionclassLoader但我无法让它工作。

谢谢

4

2 回答 2

3

JUnitCoreJunit测试的基本入口点。它的工作方式是找到一个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作为参数传递。因此,您无法获得对它的引用。

于 2013-10-01T00:46:57.653 回答
0

唯一的方法是创建一个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));
于 2013-10-01T01:58:45.103 回答