在SO博客和播客上,Joel和Jeff一直在讨论,经常被忽略的时候,单元测试一个特定的功能根本不值得努力。单元测试一个简单特征的时间是如此复杂,不可预测或不切实际,以至于测试成本不能反映特征的价值。在Joel的案例中,该示例要求进行复杂的图像比较,以简单地确定压缩质量如果他们决定编写测试。
在遇到这种情况的情况下,您遇到了哪些情况?我能想到的常见领域是图形用户界面,页面布局,音频测试(例如,确保发出声音警告的测试)等。
我正在寻找恐怖故事和真实的现实世界的例子,而不是猜测(就像我刚才所做的那样)。如果你或者那些不得不写下“不可能”测试的人继续编写它,那么奖励积分。
答案 0 :(得分:11)
@Test
public void testSetName() {
UnderTest u = new UnderTest();
u.setName("Hans");
assertEquals("Hans", u.getName());
}
测试set / get方法只是愚蠢的,你不需要它。如果你被迫这样做,你的架构有一些严重的缺陷。
答案 1 :(得分:8)
Foo foo = new Foo();
Assert.IsNotNull(foo);
答案 2 :(得分:2)
我的公司单独编写单元测试和集成测试。如果我们为数据访问类编写集成测试,则会对其进行全面测试。
他们认为单元测试与集成测试是一样的,除非它不能开箱即用(即调用数据库或web服务)。然而,我们还有数据访问类的单元测试和集成测试。
对无法连接数据的数据访问类进行测试有什么用?
答案 3 :(得分:1)
听起来像是无用单元测试的编写并不是单元测试的错,而是编写测试的程序员。 正如播客中提到的那样(我相信(或其他地方))如果单元测试难以创建,那么代码可能会被重构,即使它当前“有效”。
即使在“获取/设置名称”的情况下,即使是“愚蠢的”单元测试也是必要的。当处理具有复杂业务规则的客户端时,一些最直接的属性可能会附加荒谬的警告,并且您会发现一些令人难以置信的基本功能可能会破坏。
花时间编写一个复杂的单元测试意味着您已经花时间微调了对代码的理解,并且即使您从未完成单元测试,也可以修复这样做的错误。 / p>
答案 4 :(得分:0)
我写了一个单元测试来暴露并发错误,以回应challenge on C2 Wiki。
事实证明这是不合理的,并且暗示保证并发代码的正确性可以在更基础的层面上得到更好的处理。