gpt4 book ai didi

junit - 拦截 JUnit 断言函数

转载 作者:行者123 更新时间:2023-12-04 19:19:44 26 4
gpt4 key购买 nike

当 JUnit 中的断言失败时,我想做一些“自己的事情”。我想要这个:

public class MyAssert extends org.junit.Assert {

// @Override
static public void fail(String message) {
System.err.println("I am intercepting here!");
org.junit.Assert.fail(message);
}
}

当然,这不起作用,因为您不能覆盖静态方法。但如果是这样,那就太好了,因为每个断言函数都像 assertTrue()调用 fail()方法。因此,我可以轻松拦截每个断言。

是否有任何方法可以在这里做我想做的事情,而无需实现 assert... 的所有不同风格? ?

最佳答案

您应该查看在 Junit 4.7 中引入的规则。尤其是TestWatchman:

TestWatchman 是规则的基类,它记录测试操作,而不对其进行修改。例如,这个类将记录每个通过和失败的测试:

http://junit-team.github.io/junit/javadoc/4.10/org/junit/rules/TestWatchman.html

它允许您定义一个 MethodRule 来处理失败的测试(从 javadoc 复制):

   @Rule
public MethodRule watchman= new TestWatchman() {
@Override
public void failed(Throwable e, FrameworkMethod method) {
watchedLog+= method.getName() + " " + e.getClass().getSimpleName()
+ "\n";
}

@Override
public void succeeded(FrameworkMethod method) {
watchedLog+= method.getName() + " " + "success!\n";
}
};

@Test
public void fails() {
fail();
}

@Test
public void succeeds() {
}

根据评论 TestWatchman 在较新版本的 Junit 中被取消并替换为 TestWatcher (但功能相同):

http://junit-team.github.io/junit/javadoc/4.10/org/junit/rules/TestWatcher.html

关于junit - 拦截 JUnit 断言函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5423625/

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