gpt4 book ai didi

Java JUNIT - 使用字符串进行多次测试

转载 作者:行者123 更新时间:2023-12-02 14:11:27 24 4
gpt4 key购买 nike

我尝试通过尊重 best practices 来实现单元测试。规则之一是按方法仅使用一个“断言”。我想通过方法实现多个测试,因为每个方法开始时都会进行大量处理(插入数据库 -> 5 秒)。

我开发了这个解决方案,这是一个好的做法吗?

String failuresMsg = "";
if(9 != var1)
failuresMsg += "[var1 <9," + var1+">]";
if(9 != var2)
failuresMsg += "[var2 <9," + var2+">]";
if(9 != var3)
failuresMsg += "[var3 <9," + var3+">]";
if(9 != var4)
failuresMsg += "[var4 <9," + var4+">]";

assertEquals("", failuresMsg);

最佳答案

One of the rules is to use only one "assert" by method.

不,您应该限制自己通过测试方法来测试场景。这不是一回事。

String failuresMsg = "";
if(9 != var1)
failuresMsg += "[var1 <9," + var1+">]";
if(9 != var2)
failuresMsg += "[var2 <9," + var2+">]";
if(9 != var3)
failuresMsg += "[var3 <9," + var3+">]";
if(9 != var4)
failuresMsg += "[var4 <9," + var4+">]";

assertEquals("", failuresMsg);

通常,当您在某个范围内获得可接受的值时,您至少应该测试该范围的极限以及该范围的一个或多个内部值。

如果参加你的测试,它会给出两种测试方法(或根据看待事物的方式更多),因为我有两种不同的场景:

  • 该值可以接受

  • 该值 Not Acceptable

对于每个场景,如果代码和测试的可维护性保持良好,我可以执行我需要的任何断言。

这是一个示例代码:

@Test
public void doMethodWithAcceptableValues(){
int testValue = 0;
Assert.assertTrue(objUnderTest.doMethod(testValue));
testValue = 100; // limit value
Assert.assertTrue(objUnderTest.doMethod(testValue));
testValue = 50; // middle value 50. it is an example
Assert.assertTrue(objUnderTest.doMethod(testValue));
}

@Test
public void doMethodWithNotAcceptableValues(){
int testValue = -1;
Assert.assertFalse("-1 not acceptable", objUnderTest.doMethod(testValue));
testValue = 101; // limit value
Assert.assertFalse("101 not acceptable", objUnderTest.doMethod(testValue));
}

如果间隔不太重要,没有什么可以阻止您测试间隔的所有值,您可以使用 JUnit 机制(参数化测试)或创建自己的方法,例如使用循环执行此逻辑。
在许多情况下,家庭处理更加简单、可读和可维护。

关于Java JUNIT - 使用字符串进行多次测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41486958/

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