首页 > 解决方案 > 无法编写简单的 JUnit 测试启动器

问题描述

我的主要问题是这个类:

import java.util.Arrays;
import java.util.List;

public class TestRunner{

   public void runTests(List<String> testClassNames) throws Exception {
       for(String test: testClassNames){
           Class<?> aClass = Class.forName(test);
           System.out.println(Arrays.toString(aClass.getMethods()));
       }
   }

   public String getResult() {
       return null;
   }
}

如果应用程序有一个文本形式的测试类名称(例如,“mypackage.MyTests”),那么它应该加载调用类并运行所有标有注解的方法@MyTest。应用程序还应跟踪哪些测试成功,哪些不成功。成功的唯一标准是测试没有抛出异常。

我不确定我应该如何获得所需的结果,例如和"test1() - OK"方法 。"test2() - FAILED"getResult()

到目前为止,我可以获得ExampleTests1方法列表[public void reflection.tester.ExampleTests1.test1(), public void reflection.tester.ExampleTests1.test2()]。我应该创建一个新列表或包含的东西,aClass.getMethods()然后getResult()我会做一个 for 循环并获得所需的结果吗?

此 TestRunner 类通过所需的类和方法:

MyTest 接口:

public @interface MyTest {
    Class<? extends Throwable> expected() default None.class;

    class None extends Throwable {}
}

ExampleTests1 类:

public class ExampleTests1 {

    @MyTest
    public void test1() {
    }

    @MyTest
    public void test2() {
        throw new RuntimeException();
    }

}

和 TestRunner 类的测试:

@Test
   public void runsTestsFromDecoupledFiles() throws Exception {

       List<String> testClassNames = List.of(
               "reflection.tester.ExampleTests1");

       TestRunner testRunner = new TestRunner();

       testRunner.runTests(testClassNames);

       String result = testRunner.getResult();

       assertThat(result, containsString("test1() - OK"));
       assertThat(result, containsString("test2() - FAILED"));
}

标签: javaunit-testingexception

解决方案


推荐阅读