运行 JUnit4 测试 - 从 java 程序

发布于 2024-08-29 12:29:57 字数 180 浏览 4 评论 0原文

我想知道如何在 java 程序中运行一些 JUnit4 测试。基本上 - 根据运行时的某些条件,我需要决定使用哪个测试运行器。使用 Junit3 我可以覆盖 TestCase 类中的 runTest 方法 - 但在 JUnit4 测试中不扩展 TestCase 类,所以我没有什么可以覆盖的...是否可能有一些我需要实现的方法...或者其他...

I was wondering how to run some JUnit4 test inside a java program. Basically - depending on some conditions during runtime I need to decide which test runner to use. Using Junit3 I could override runTest method from TestCase class - but in JUnit4 tests do not extend TestCase class so I have nothing to override... Is there maybe some method that I need to implement... or sth else...

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

秋叶绚丽 2024-09-05 12:29:57

这是一些示例代码:

public void checkTests() throws org.junit.runners.model.InitializationError {
    checkTestClass((Class<?>) MyTestClss.class);
}

private void checkTestClass(Class<?> theClass) throws InitializationError {
    final RunNotifier notifier = new RunNotifier();
    notifier.addListener(new RunListener() {
        @Override
        public void testFailure(Failure failure) throws Exception {
            Assert.fail(failure.getMessage());

        }
    });

    final Runner runner = new BlockJUnit4ClassRunner(theClass);

    runner.run(notifier);
}

Here's some sample code for you:

public void checkTests() throws org.junit.runners.model.InitializationError {
    checkTestClass((Class<?>) MyTestClss.class);
}

private void checkTestClass(Class<?> theClass) throws InitializationError {
    final RunNotifier notifier = new RunNotifier();
    notifier.addListener(new RunListener() {
        @Override
        public void testFailure(Failure failure) throws Exception {
            Assert.fail(failure.getMessage());

        }
    });

    final Runner runner = new BlockJUnit4ClassRunner(theClass);

    runner.run(notifier);
}
熟人话多 2024-09-05 12:29:57

我遇到的问题是我必须在每个测试用例之前运行一个方法(不能是静态的)

如果这个非静态方法与预调节测试用例相关,您可以通过使用 @Before 在你的测试类中。查看 Junit4 文档以了解 @Before 的行为。

否则,要简单地触发 Junit 测试类,您可以使用以下代码:

Runner r = 
try {
  r = new BlockJUnit4ClassRunner(Class.forName(testClass));
} catch (ClassNotFoundException | InitializationError e) {  // FIX if necessary: JDK 7 syntax
  // handle
}
JUnitCore c = new JUnitCore();
c.run(Request.runner(r));

希望有帮助。

The problem I have is that I have to run a method (which cannot be static) before each test case

If this non-static method is something related to pre-conditioning the test case, you could achieve this by annotating a method using @Before in you test class. Take a look at the Junit4 docs for the behavior of @Before.

Otherwise, to simply trigger a Junit test class, you can use the following code:

Runner r = 
try {
  r = new BlockJUnit4ClassRunner(Class.forName(testClass));
} catch (ClassNotFoundException | InitializationError e) {  // FIX if necessary: JDK 7 syntax
  // handle
}
JUnitCore c = new JUnitCore();
c.run(Request.runner(r));

Hope that helps.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文