通过注释收集 JUnit 测试元数据
Collect JUnit Test Metadata via Annotations
是否有一个 class/method 我可以在 JUnit 中实现,它基本上是一个“钩子”,在每个测试用例完成后运行,用户定义的(代码中的)元数据可用?
我正在努力完成这样的事情:
- 使用用户定义的注释来注释测试用例,例如团队所有权(例如
@Team(Teams.PAYMENTS)
)
- 使用 3 个值将测试结果打印到控制台:测试名称(测试函数名称)、状态(pass/fail)和团队(注释值)
为了简单起见,我只需要打印这个信息(稍后它会在其他地方发布),但我真的迷失在哪里我可以获得这个测试元数据信息一处,试运行后?
我试图在我们的一个 TestRunner
class:
中重写完成方法
override fun finish(resultCode: Int, results: Bundle?) {
System.out.println("===breakpoint here===")
super.finish(resultCode, results)
}
但是调试的时候,这里没有测试元数据。关于我如何处理这个问题有什么建议吗?
谢谢!
对于 JUnit 4,您可以使用 TestWatcher 规则:
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
public class TestWatcherAPIUnitTest {
@Rule(order = Integer.MIN_VALUE)
public TestWatcher watchman = new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
System.out.println(description + " Team: " + getTeam(description) + " failed!");
}
@Override
protected void succeeded(Description description) {
System.out.println(description + " Team: " + getTeam(description) + " success!");
}
String getTeam(Description description) {
Team team = description.getAnnotation(Team.class);
return (team != null) ? team.value() : "unknown_team";
}
};
@Test
@Team("team1")
public void failing_test() {
Assert.assertTrue(false);
}
@Test
@Team("team2")
public void successful_test() {
Assert.assertTrue(true);
}
}
同样,对于 JUnit5,有一个 TestWatcher API
是否有一个 class/method 我可以在 JUnit 中实现,它基本上是一个“钩子”,在每个测试用例完成后运行,用户定义的(代码中的)元数据可用?
我正在努力完成这样的事情:
- 使用用户定义的注释来注释测试用例,例如团队所有权(例如
@Team(Teams.PAYMENTS)
) - 使用 3 个值将测试结果打印到控制台:测试名称(测试函数名称)、状态(pass/fail)和团队(注释值)
为了简单起见,我只需要打印这个信息(稍后它会在其他地方发布),但我真的迷失在哪里我可以获得这个测试元数据信息一处,试运行后?
我试图在我们的一个 TestRunner
class:
override fun finish(resultCode: Int, results: Bundle?) {
System.out.println("===breakpoint here===")
super.finish(resultCode, results)
}
但是调试的时候,这里没有测试元数据。关于我如何处理这个问题有什么建议吗?
谢谢!
对于 JUnit 4,您可以使用 TestWatcher 规则:
import org.junit.Assert;
import org.junit.Rule;
import org.junit.Test;
import org.junit.rules.TestWatcher;
import org.junit.runner.Description;
public class TestWatcherAPIUnitTest {
@Rule(order = Integer.MIN_VALUE)
public TestWatcher watchman = new TestWatcher() {
@Override
protected void failed(Throwable e, Description description) {
System.out.println(description + " Team: " + getTeam(description) + " failed!");
}
@Override
protected void succeeded(Description description) {
System.out.println(description + " Team: " + getTeam(description) + " success!");
}
String getTeam(Description description) {
Team team = description.getAnnotation(Team.class);
return (team != null) ? team.value() : "unknown_team";
}
};
@Test
@Team("team1")
public void failing_test() {
Assert.assertTrue(false);
}
@Test
@Team("team2")
public void successful_test() {
Assert.assertTrue(true);
}
}
同样,对于 JUnit5,有一个 TestWatcher API