我有大约100个单元测试,覆盖率为%20,我正在努力增加覆盖范围,这也是一个开发项目,所以不断添加新的测试.
目前在每次构建之后运行我的测试是不可行的,他们需要大约2个时刻.
测试包括:
从测试文件夹中读取文件(数据驱动样式以模拟某些HTTP内容)
对本地Web服务器执行实际的HTTP请求(这是一个非常痛苦的模拟,所以我不会)
不是所有的单元测试,但也有相当复杂的多线程类需要测试,我测试测试的整体行为.这可以被视为功能测试,但也需要每次都运行.
大多数功能都需要读取HTTP,执行TCP等.我无法更改它们,因为如果我改变这些测试,这就是项目的整体想法,测试内容将毫无意义.
另外,我认为我没有最快的工具来运行单元测试.我当前的设置使用VS TS与Gallio和nUnit作为框架.我认为VS TS + Gallio也比其他人慢一点.
你会建议我解决这个问题?我想在每一点点改变之后运行单元测试btu目前这个问题正在打断我的流程.
进一步澄清编辑:
代码高度耦合!不幸的是,变化就像一个巨大的反射过程.并且有一个鸡蛋综合症,我需要单元测试来重构这么大的代码,但如果我不重构它我就不能有更多的单元测试:)
高度耦合的代码不允许我将测试分成更小的块.此外,我不测试私人物品,这是个人选择,这使我能够更快地发展并仍然获得大量的好处.
并且我可以确认所有单元测试(具有适当的隔离)实际上非常快,并且我没有它们的性能问题.
进一步澄清:
代码高度耦合!不幸的是,变化就像一个巨大的反射过程.并且有一个鸡蛋综合症,我需要单元测试来重构这么大的代码,但如果我不重构它我就不能有更多的单元测试:)
高度耦合的代码不允许我将测试分成更小的块.此外,我不测试私人物品,这是个人选择,这使我能够更快地发展并仍然获得大量的好处.
并且我可以确认所有单元测试(具有适当的隔离)实际上非常快,并且我没有它们的性能问题.
这些对我来说听起来不像是单元测试,但更像是功能测试.这很好,自动化功能测试很好,但功能测试很慢很常见.他们正在测试整个系统(或大部分系统).
单元测试往往很快,因为他们正在测试一件与其他事物隔离的东西.如果您无法独立于其他所有事情进行测试,则应考虑您编码的警告标志过于紧密耦合.
你能告诉你哪些测试是单元测试(仅测试1件事)和功能测试(同时测试2件或更多件事)?哪些是快速的哪些是慢的?
您可以将测试分成两组,一组用于短测试,一组用于长时间运行的测试,并且在每次更改后运行短测试时运行长时间运行的测试.除此之外,模拟来自Web服务器的响应以及您的应用程序所做的其他请求将导致更短的测试运行.
我会建议你解决问题的综合方法:
经常运行与您更改的代码相近的测试子集(例如,来自相同包,模块或类似的测试).运行较少的测试会从您当前正在处理的代码中进一步删除.
将套件分成至少两个:快速运行和慢速运行测试.更频繁地运行快速运行的测试.
考虑让一些不太可能失败的测试只能由自动化的持续集成服务器执行.
学习提高测试性能的技巧.最重要的是通过更快的假货取代对慢速系统资源的访问.例如,在内存流而不是文件中使用.存根/模拟http访问.等等
了解如何使用低风险依赖性破坏技术,例如(强烈推荐的)"有效使用遗留代码"一书中列出的技术.这些允许您在不应用高风险重构的情况下有效地使您的代码更易于测试(通常通过暂时使实际设计变得更糟,例如打破封装,直到您可以使用测试的安全网重构更好的设计).
我从上面提到的书中学到的最重要的事情之一:没有魔法,使用遗留代码是痛苦的,而且总是很痛苦.你所能做的只是接受这个事实,并尽力慢慢地摆脱困境.