如何在JUnit 4测试类中运行单个方法?

时间:2012-11-28 13:07:40

标签: java junit junit4 junit3

我看过所有类似的问题,但在我看来,他们都没有给出明确答案。我有一个测试类(JUnit 4,但也对JUnit 3感兴趣),我希望以编程方式/动态(而不是命令行)从这些类中运行单独的测试方法。比如,有5个测试方法,但我只想运行2.如何以编程方式/动态实现(不是从命令行,Eclipse等)。

此外,还存在测试类中存在@Before注释方法的情况。因此,在运行单独的测试方法时,@Before也应该预先运行。怎么能克服这个?

提前致谢。

2 个答案:

答案 0 :(得分:2)

这是一个简单的单一方法跑步者。它基于JUnit 4框架,但可以运行任何方法,不一定用@Test

注释
    private Result runTest(final Class<?> testClazz, final String methodName)
            throws InitializationError {
        BlockJUnit4ClassRunner runner = new BlockJUnit4ClassRunner(testClazz) {
            @Override
            protected List<FrameworkMethod> computeTestMethods() {
                try {
                    Method method = testClazz.getMethod(methodName);
                    return Arrays.asList(new FrameworkMethod(method));

                } catch (Exception e) {
                    throw new RuntimeException(e);
                }
            }
        };
        Result res = new Result();
        runner.run(res);
        return res;
    }

    class Result extends RunNotifier {
        Failure failure;

        @Override
        public void fireTestFailure(Failure failure) {
            this.failure = failure;
        };

        boolean isOK() {
            return failure == null;
        }

        public Failure getFailure() {
            return failure;
        }
    }

答案 1 :(得分:0)

我认为这只能通过自定义TestRunner完成。您可以在启动测试时传递要作为参数运行的测试的名称。一个更有利的解决方案是实现一个自定义注释(比如说@TestGroup),它将一个组名作为参数。你可以用它来注释你的测试方法,给你想要一起运行相同组名的那些测试。再次,在启动测试时将组名称作为参数传递。在测试运行器中,仅收集具有相应组名的那些方法并启动这些测试。

但是,最简单的解决方案是将您想要单独运行的测试移动到另一个文件......

相关问题