gpt4 book ai didi

java - JUnit @理论 : is there a way to throw meaningful exception?

转载 作者:行者123 更新时间:2023-11-28 20:15:56 24 4
gpt4 key购买 nike

我最近尝试了 Junit @Theory 测试风格:这是一种非常有效的测试方式。但是,我对测试失败时抛出的异常不满意。示例:

import static org.junit.Assert.assertEquals;
import org.junit.experimental.theories.DataPoint;
import org.junit.experimental.theories.Theories;
import org.junit.experimental.theories.Theory;
import org.junit.runner.RunWith;


@RunWith(Theories.class)
public class TheoryAndExceptionTest {

@DataPoint
public static String yesDataPoint = "yes";

@Theory
public void sayNo(final String say) {
assertEquals("no",say);
}
}

我希望这个测试抛出一个描述性异常,而不是得到像这样的东西:

org.junit.ComparisonFailure: expected:<'[no]'> but was:<'[yes]'>

...我明白了:

org.junit.experimental.theories.internal.ParameterizedAssertionError: sayNo(yes) at
....
[23 lines of useless stack trace cut]
...
Caused by: org.junit.ComparisonFailure: expected:<'[no]'> but was:<'[yes]'>
....

有没有办法去掉前 24 行,这些行除了 yesDataPoint @DataPoint 导致失败外,没有任何关于 *my*test 的信息?这是我需要的信息,以了解失败的原因,但我真的很想知道如何同时失败。

[编辑]

我用经典的 org.junit.Assert.assertEquals 替换了 org.fest.assertions 用法,以避免混淆。此外,它也与 Eclipse 无关:当您从命令行运行 @Theory 并使它失败时,您也会得到很长的(无用/令人困惑的)堆栈跟踪。

最佳答案

捕获ComparisonFailure有问题吗?并打印它的 GetMessage()?

public void sayNo(final String say) {
try {
assertThat(say).isEqualTo("no");
}catch(ComparisonFailure e) {
System.out.println(e.getMessage);
}
}

如有误会,请见谅。

编辑:ComparisonFailure 也有 getExpected() 和 getActual() 方法,您可以在寻找特定格式时调用它们。

关于java - JUnit @理论 : is there a way to throw meaningful exception?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13751161/

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