我刚刚阅读question,它回答了单元测试的理想特征,但应该避免什么?是什么让单元测试“糟糕”?
您见过的最糟糕的单元测试是什么? (例如。我记得一位开发人员告诉我,他曾经发现一个测试套件有很多方法,但完全没有任何断言)。
我特别感兴趣的是单元测试稍微有些细微和具体的问题,例如假设你有一个测试套件,运行速度快,覆盖范围广,它还有什么问题?
答案 0 :(得分:9)
使用外部依赖项(数据库,文件,服务器,时间......)进行测试
相互依赖的测试
验证实施而不是行为的测试
测试速度太慢,没有人执行
测试过多的东西
答案 1 :(得分:3)
对于我而言,单元测试的可读性是最佳选择。如果我在2秒内无法阅读和理解测试,那可能有些不对劲。任何超过5行的测试最好有一个很好的借口。
有时人们会将重构过多,我必须查看各种帮助程序类或父类,以找出正在测试的内容。重构测试时始终牢记可读性。如果这意味着测试更清晰,有时最好留一点重复。
答案 2 :(得分:2)
脆弱的测试通常会产生不可接受的维护开销,这会导致测试无法更新,处于损坏状态,并且由于与源代码不同步而无法运行。
脆弱的测试通常依赖于文件系统,注册表项,数据库等...这些在集成和系统测试中都很好但有时我看到测试伪装(拼写?)作为具有这些属性的单元测试,这通常是个问题。
答案 3 :(得分:1)
最好的单元测试很容易阅读和理解。快速执行。经测试的特定功能,经过重构并得到维护。
最糟糕的不是以上。
答案 4 :(得分:1)
根据CW的精神,我知道有一天它会派上用场。
你也确实要求一个特定的:)见下面的MAGIC块
@Test
public void testCheckForDuplicateCustomer() {
//List<CustomerSearch> customerInfo = null;
String customerName = null;
boolean status = false;
try {
status = custSearchService.checkForDuplicateCustomer(customerName);
/*************/ MAGIC BEGINS HERE
if(status){
assertEquals(true, status);
} else {
assertEquals(false, status);
}
/**************/ MAGIC ENDS HERE
} catch (Exception e) {
//fail();
}
}
答案 5 :(得分:0)
测试不够或根本没有测试。
例如,如果在方法执行时未验证相关的输出参数或对象数据,则仅检查方法的返回值是不够的。
测试运行正常,覆盖范围很高但是你没有真正验证任何东西......