gpt4 book ai didi

java - 当 Junit 是匿名类时,不会启动测试用例

转载 作者:行者123 更新时间:2023-11-30 02:53:18 24 4
gpt4 key购买 nike

我正在尝试使用 JUnit 进行功能测试。基本上我这样做是为了访问 JUnit 报告。不幸的是,我在尝试从 main 方法启动 JUnit 时遇到了问题。

基本上,我正在开发一个功能测试工具,用户可以在其中提供测试文件名作为命令行的参数。我将其简化如下:

import org.junit.runner.JUnitCore;

public class MainClass {
public static void main(String[] args) throws Exception {
TestCase testCase = new TestCase() {
@Override
public String getPath() {
return args[0];
}
};

JUnitCore junit = new JUnitCore();
junit.run(testCase.getClass());
}
}

TestCase 类然后对提供的参数进行操作并提供输出:

import org.junit.Assert;
import org.junit.Test;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

public class TestCase {
private static final Logger LOGGER = LoggerFactory.getLogger(TestCase.class);

public String getPath() {
return "etc/Default.flow";
}

@Test
public void testFunc() {
try {
LOGGER.info("Entered testFunc()");
Launcher launcher = new Launcher(getPath());
launcher.launch();
launcher.awaitCompletion();

Assert.assertTrue(launcher.getStatus());
LOGGER.info("Success");
} catch (AssertionError e) {
LOGGER.error("Assertion error", e);
}
}

因此,从上面我们可以看到,Launcher 实例将以不同的文件名启动,具体取决于命令行中输入的内容。

问题是 Junit 没有运行我的匿名类。基本上,main 方法退出时不会发生任何断言或日志记录。因此,根本不会调用 TestCase testFunc() 方法。

但是,当我将 TestCase 实例更改为非匿名时,一切都会按预期工作并且测试用例成功:

import org.junit.runner.JUnitCore;

public class MainClass {
public static void main(String[] args) throws Exception {
TestCase testCase = new TestCase();

JUnitCore junit = new JUnitCore();
junit.run(testCase.getClass());
}
}

为什么 JUnit 仅在非匿名时才启动 Test 类?

最佳答案

如果在运行测试之前添加监听器junit.addListener(new TextListener(System.out));,您将看到类似以下内容:

There were 2 failures:
1) initializationError(junit.MainClass$1)
java.lang.Exception: The class junit.MainClass$1 is not public.
...
2) initializationError(junit.MainClass$1)
java.lang.Exception: Test class should have exactly one public constructor
at org.junit.runners.BlockJUnit4ClassRunner.validateOnlyOneConstructor(BlockJUnit4ClassRunner.java:158)
at org.junit.runners.BlockJUnit4ClassRunner.validateConstructor(BlockJUnit4ClassRunner.java:147)
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:127)
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416)
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84)
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65)

这意味着 JUnit 无法执行由匿名类表示的测试用例。

关于java - 当 Junit 是匿名类时,不会启动测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37995895/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com