Jam*_*sev 13 junit unit-testing conventions
按照惯例,我想知道当测试失败时,是否适合:
例如,
fail("Accessed the element which does not exist");
Run Code Online (Sandbox Code Playgroud)
要么
fail("ArrayIndexOutOfBoundException was expected but something bad happened");
Run Code Online (Sandbox Code Playgroud)
通常首选/接受哪一个?
lim*_*imc 15
首先,如果您希望测试的API抛出异常,而不是try-catch
使用fail()
...
@Test
public void testMe() {
try {
api.testThis();
fail("should not reach here");
}
catch(MyException e) {}
}
Run Code Online (Sandbox Code Playgroud)
... 你应该做这个:-
@Test(expected=MyException.class)
public void testMe() {
api.testThis();
}
Run Code Online (Sandbox Code Playgroud)
那说,我很少使用fail()
.如果我需要执行某些验证并且条件失败,我很可能会使用断言而不是使用fail()
...例如: -
... 代替...
@Test
public void testMe() {
boolean bool = api.testThis();
if (!bool) {
fail("should be true because bla bla bla");
}
}
Run Code Online (Sandbox Code Playgroud)
... 做这个:-
@Test
public void testMe() {
boolean bool = api.testThis();
assertTrue("bla bla bla",bool);
}
Run Code Online (Sandbox Code Playgroud)
但是,如果你真的需要使用fail()
,请详细说明为什么它失败而不是"不应该到达这里"或"应该在这里失败",因为这对读取测试用例的人没有帮助.
当然,这些只是简单的例子....但我想我得到了我的观点.:)
Mac*_*Mac 10
鉴于这是测试代码并且不应该进入最终构建,我会说越详细越好.因此,我会选择第一个 - 问题的根本原因更清楚,这使得更容易纠正.
在所有情况下我都会避免使用第二个,因为它对测试人员来说并不是很有帮助,如果它确实以某种方式进入最终构建,它比第一个用户更加神秘 - 它对测试人员或用户都一样.
我考虑的另一个选项是指出发生异常,而不是提供实际异常的详细信息 - 这就是发明堆栈跟踪的原因.这将传达比列出的任何方法更多的细节.
归档时间: |
|
查看次数: |
28224 次 |
最近记录: |