gpt4 book ai didi

java - 正在使用 Assert.assertTrue(true);并断言 Assert.fail(); JUnit 测试的良好实践?

转载 作者:行者123 更新时间:2023-11-29 06:54:45 24 4
gpt4 key购买 nike

这种使用 Assert.assertTrue(true) 的做法是好是坏?和 Assert.fail() 在 JUnit 测试中,为什么?

我知道还有规则 @Test (expected = Exception.class),但是你可以有不止一个异常可以在测试方法上引发,如果你不想为一个测试方法使用无数的测试方法,这个可以选择。

用例是这样的:您测试可以引发零个、一个或多个异常的方法(例如,使其简单化为一个)并且您想要测试调用是否正常的用例,因此不应出现异常提高,如果你进入 catch block ,你将提高 Assert.fail();然后你想要在应该引发异常时测试用例,所以你调用 catch block Assert.assertTrue(true);说“是的,这就是我想要的”。从测试中,您可以在一种测试方法中看到它何时应该失败,以及何时运行测试,如果它真的像您想要的那样运行。
问题是:这是好事还是坏事?为什么?

public void fooMethod(boolean paramenter) {
if(false) {
throw new Exception();
}
}

@Test
public void testFooMethod() {

try {
myTestedClassMock.fooMethod(true); //should not raise exception
} catch(Exception e) {
Assert.fail();
}

try {
myTestedClassMock.fooMethod(false); //should raise exception
} catch (Exception e) {
Assert.assertTrue(true);
}

}

最佳答案

你总是可以省略 Assert.assertTrue(true) 因为 assertTrue 是为不同的目的而设计的。它用于检查涉及多个 boolean 项的一般条件,例如

Assert.assertTrue(t == null ||| minSize < 0 || t.size() > minSize);

断言常量 true 总是成功而不留痕迹,因此您可以从代码中完全删除这一行。通过在必须抛出异常的测试代码行之后立即放置 Assert.fail(); 来捕获预期异常抛出的情况,并显示一条消息没有抛出预期的异常。

if you don't want to have zillion testing methods for one tested method, this could be option.

通常,“不计其数的测试方法”是更好的选择。作为替代方案,您可以在测试中捕获 ExceptionRuntimeException,而不是捕获每个单独的异常。这在生产代码中是一种有问题的做法,但在您必须确保不抛出任何异常时,在测试代码中绝对没问题。

但是,Assert.fail(); 并不是一种不常见的快捷方式,通常也是可以接受的。添加一条消息来描述失败背后的原因是个好主意,这样维护您的代码的人就不必通读您的测试以了解发生了什么。当您捕获异常时,它的消息是测试失败消息的一个很好的候选者。

关于java - 正在使用 Assert.assertTrue(true);并断言 Assert.fail(); JUnit 测试的良好实践?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36738858/

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