如domain-manager article所示,我有兴趣创建一个集成测试工具,用于创建服务器和许多客户端,其中所有客户端都在单个进程中运行。但是一旦我实现了这个目标,我就会非常想要执行这样的集成。系统测试来自单元测试框架(NUnit或VS Team测试)。
选择在单元测试框架内运行集成或系统测试有哪些优缺点?这是我自己的刺:
无论哪种方式,如果我的新集成测试代码不放入单元测试框架,您会在哪里推荐它?换句话说,你会推荐什么样的“集成测试”框架?
答案 0 :(得分:3)
我认为使用您已经熟悉的单元测试框架编写集成测试没有任何问题。由于这些是集成测试,因此有一些因素可以将它们与单元测试区分开来。一个原因是它们依赖于外部系统(即使你在代码中将它们中的一些旋转起来),所以如果其中一个不可用,那么你的测试将会失败。另一方面,正如您已经指出的那样,集成测试需要更长时间才能运行。
解决这些问题的方法是将构建脚本配置为不在CI构建期间运行集成测试,但在计划构建期间(例如每晚构建)运行它们。同样重要的是,开发人员能够按需手动运行集成测试,以便他们可以在本地计算机上验证所有测试都没有破坏,如果有,则能够验证他们是否已更正没有手动触发系统构建的问题。
根据您使用的测试框架,您可以使用不同的方法将单元测试与集成测试分开,以便您可以配置构建以执行其中一个或两个。一种方法是将集成测试移动到单独的项目中,并且仅在每晚构建期间在该项目中执行测试。另一种方法是使用Category attribute in NUnit之类的东西将某些测试标记为集成测试。然后,您可以配置测试运行器以排除此类别中针对您不希望执行集成测试的构建的测试。
答案 1 :(得分:0)
自动化测试的点是帮助进行测试。
您已花时间编写测试。它可以在将来再次运行是一件好事(它有助于确保你没有破坏任何东西)。
NUnit是一个帮助您运行您想要运行的测试的系统。对于“人为测试”进行“更彻底的测试”,你并不是一个坏人。
唯一的缺点是其中一些测试需要太长时间;并且不鼓励开发人员在每次运行时运行测试。那时分类(即选择性地和暂时地)禁用测试是完全可以接受的。
我编写的单元测试专门用于记录函数中的错误。没有立即需要修复它since it's a one in a million chance that anyone will hit the bug(i've even been insulted for even testing the case)。但至少测试就在那里 - 提醒大家所有时间该功能都不完美:
void TestDateToString_KnownBug_FailsOnPseudo();
当然我取消了那个测试,所以我没有看到它一直失败,但是单元测试的目的是让我的生活更容易 - 而不是更痛苦。
答案 2 :(得分:0)
如果您考虑一下,大多数单元测试框架都不是单元测试所特有的。它们提供了运行任意代码并验证其输出的工具。所有这些对于集成和系统测试来说都是必要的(如果还不够)。
出于这个原因,我认为使用“单元”测试框架进行非单元测试是完全合理的。
<强>赞成强>
<强>缺点强>