我试图通过尊重best practices来实现单元测试。其中一条规则是只使用一个"assert“by方法。我想实现几个方法的测试,因为有一个沉重的处理,这是在每个方法的开始(插入数据库->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);发布于 2017-01-05 22:39:09
assert规则之一是只使用一个“
”by方法。
不,您应该将自己限制为通过测试方法来测试场景。这不是一回事。
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);一般来说,当你有一个范围可接受的值时,你至少应该测试这个范围的界限和这个范围的一个或几个内部值。
如果参加你的测试,它会给出两种测试方法(或根据看待事物的方式更多),因为我有两种截然不同的场景:
(无法接受该值为可接受的值
对于每个场景,如果代码和测试的可维护性保持良好,我可以执行所需的任何断言。
下面是一个示例代码:
@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机制(参数化测试)或创建自己的方法来执行此逻辑,例如,如果间隔不是太重要,则不会阻止您测试所有值。
在许多情况下,家庭处理更加简单、可读和可维护。
发布于 2017-01-05 22:42:18
我认为,您可以在测试中使用JUnitParamsRunner。如果你使用它,你可以在test方法中添加参数。然后,您可以从方法体中删除if。
示例:
@RunWith(JUnitParamsRunner.class)
public class TestSomething{
@Test
@Parameters({ "A", "B", "C" })
public void shouldDoSomething(String s){
assertEquals(s, "s");
}
//OR
@Test
@Parameters(method = "data")
public void shouldSomething(String a, String b){
assertEquals(a,b);
}
@SuppressWarnings("unused")
private Object[] data() {
return $( //
$("A", "B") //
);
}
}我认为,比起测试中的meny if更好,更具可读性,因为你只有一个断言,起始值在测试期间不会改变,而且参数非常容易扩展和维护。
https://stackoverflow.com/questions/41486958
复制相似问题