2014-11-25 45 views
3

我的团队正在开发已经运行好几年的应用程序,但没有单元测试曾经被编码过。现在我们希望开始这样做,我们意识到我们不可能通过所有现有的方法来测试它们,因为这需要花费数年的时间。哪种方法绝对需要单元测试

现在的问题是:如何才能确定哪种方法绝对需要单元测试,哪些方法不需要?

你愿意单元测试一个经常被调用的方法或者经常被修改的方法吗? 我读过单元测试在DAO类上效率相当低。我应该将测试限制在包含逻辑的方法吗?

最重要:只要部分应用程序是单元测试,测试是否会有用?

+0

我回答了类似的问题[这里](https://stackoverflow.com/questions/26672866/refactoring-wpf-mvvm-for-increased-testability/26675374#26675374) - 也许它可以帮助。 – 2014-11-25 15:08:53

回答

2

怎样才能确定哪种方法绝对需要单元测试,哪个方法不行?

这是一个难以回答的问题,不知道您的代码库以及它的历史和未来。但总的来说,编写难以理解的代码部分的测试将在不久的将来进行修改,或者已知存在错误。在测试遗留应用程序时,最好的方法就是进行测试,让程序更容易维护,修复错误并防止旧错误再次发生。

你愿意单元测试一个经常调用的方法或者经常修改的方法吗?

如上所述,这取决于。被调用的方法通常微不足道?容易明白?为了使未来的开发更容易,我可能会倾向于“经常修改”。但理想情况下,两者都应该经过测试

我读过单元测试在DAO类上相当低效。

我不知道你在哪里阅读。如果你使用模拟对象,单元测试可以非常有效地使用DAO。

只要部分应用程序是单元测试,测试是否会有用?

任何测试都很有用。测试只覆盖10%的程序优于覆盖率为0%的程序。特别是如果这10%是该计划最重要或最棘手的部分。

如果您还没有读过它,我强烈建议Michael Feather的与遗留代码有效地工作,其中“遗留代码”是指没有测试的代码。

+1

我想你可能误读了“我应该将测试限制在包含逻辑的方法吗?”。你似乎没有意识到这是暴力协议;-) – 2014-11-25 14:43:43

+0

关于DAO类,是不是模拟对象避免调用数据库,这意味着最终你没有真正测试它?正如邓肯所说,我认为最后一点有一个误区:) – realUser404 2014-11-25 14:46:45

+0

@ realUser404:是的,你说的没错。这里的Dkatzel可能会误解。与最后一点相同。也许你可以改进你的答案来回答*实际*点? – 2014-11-25 14:49:15

0

有些人为getter和setter创建单元测试,并坚持100%的代码覆盖率。

实用的人会测试那些需要测试的方法。这意味着什么取决于你的智慧和对构成需要测试的方法的辨别力。

Some people然而,考虑一个单位的最小尺寸是类,并且测试应该被创建来测试一个类(有时它的相关类)。

简而言之,忘记任何一种关于单元测试的教条原则,重要的是代码的质量。就像敏捷开发一样,它可以帮助你实现这个重要的目标。所以如果你觉得你的DAO对象不会从测试中受益,那就不要费神了 - 花那么多时间,你会花更多的时间去做更高效的事情。