can*_*nge 8 java junit4 assertion java-5
我想在我们的代码库中添加一些自定义断言,以正确隐藏故障跟踪.我知道如何编写一个可以静态导入的公共静态方法.我知道如何重用旧的断言或抛出新的断言AssertionError
.
我无法弄清楚如何做的是将新的自定义断言保留在Failure Trace之外.我们已经习惯了故障跟踪中的第一个命中,而不是断言代码本身,而是调用断言的测试代码.
我知道有一个filtertrace
控制过滤堆栈的属性,但我找不到任何关于将新断言添加到过滤器所需要做的好文档.
我想做的一个例子:
package testassertions;
import static newassertions.MyAssertions.myAssertTrue;
import org.junit.Test;
public class ExampleTest {
@Test
public void myAssertTruePassing() { myAssertTrue(true); }
@Test
public void myAssertTrueFailing() { myAssertTrue(false); }
}
Run Code Online (Sandbox Code Playgroud)
package newassertions;
import static org.junit.Assert.assertTrue;
public class MyAssertions {
public static void myAssertTrue(boolean b) {
assertTrue(b);
}
}
Run Code Online (Sandbox Code Playgroud)
myAssertTrueFailing()的失败跟踪显示:
java.lang.AssertionError
at newassertions.MyAssertions.myAssertTrue(MyAssertions.java:8)
at testassertions.ExampleTest.myAssertTrueFailing(ExampleTest.java:12)
Run Code Online (Sandbox Code Playgroud)
我需要它只显示:
java.lang.AssertionError
at testassertions.ExampleTest.myAssertTrueFailing(ExampleTest.java:12)
Run Code Online (Sandbox Code Playgroud)
如另一个有关清除堆栈跟踪噪声的问题所述,从IDE中过滤类可能是最简单的解决方案。实际上,您在问题中显示的堆栈跟踪已被过滤。
如果您确实想在代码中执行此操作,则可以将过滤添加到自定义断言类中,如下所示:
package newassertions;
import static org.junit.Assert.assertTrue;
import java.util.ArrayList;
public class MyAssertions {
public static void myAssertTrue(boolean b) {
try {
assertTrue(b);
} catch (AssertionError e) {
filterStackTrace(e);
throw e;
}
}
private static void filterStackTrace(AssertionError error) {
StackTraceElement[] stackTrace = error.getStackTrace();
if (null != stackTrace) {
ArrayList<StackTraceElement> filteredStackTrace = new ArrayList<StackTraceElement>();
for (StackTraceElement e : stackTrace) {
if (!"newassertions.MyAssertions".equals(e.getClassName())) {
filteredStackTrace.add(e);
}
}
error.setStackTrace(filteredStackTrace.toArray(new StackTraceElement[0]));
}
}
}
Run Code Online (Sandbox Code Playgroud)
在此示例中,从堆栈跟踪中过滤了封闭类'newassertions.MyAssertions'的名称(硬编码)。这种机制显然也可以从您自己创建的AssertionError过滤堆栈跟踪,而不仅仅是从其他断言中引发的堆栈跟踪。
归档时间: |
|
查看次数: |
2525 次 |
最近记录: |