通过注解收集junit测试元数据

t3psigkw  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(401)

我是否可以在junit中实现一个类/方法,它基本上是一个“钩子”,在每个测试用例完成后运行,并提供用户定义(代码中)元数据?
我正在努力完成这样的事情:
使用用户定义的注解来注解测试用例,例如团队所有权(例如。 @Team(Teams.PAYMENTS) )
使用3个值将测试结果打印到控制台:测试名称(测试函数名称)、状态(通过/失败)和团队(注解值)
为了简单起见,我只需要打印这个信息(稍后它会在其他地方发布),但是我真的迷失在测试运行之后,在哪里可以在一个地方获得这个测试元数据信息?
我试图在我们的一个应用程序中重写finish方法 TestRunner 班级:

override fun finish(resultCode: Int, results: Bundle?) {
        System.out.println("===breakpoint here===")

        super.finish(resultCode, results)
    }

但是调试时,这里没有测试元数据。有没有什么建议可以帮我解决这个问题?
谢谢您!

fcg9iug3

fcg9iug31#

对于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

相关问题