我必须开始使用 QualityTools.UnitTestFramework 为我们开发的 Web 服务层编写一些单元测试,而我的方法从一开始似乎就不正确。
单元测试似乎应该能够以任何顺序运行,而不依赖于其他测试。
我最初的想法是拥有类似于以下测试(简化示例)的东西,它将以相同的顺序作为有序测试运行。
添加对象1成功测试
AddObject2WithSameUniqueCodeTest
(依赖于首先创建 object1 的第一个测试,然后预计会失败)
添加对象2成功测试
UpdateObject2WithSameUniqueCodeTest
(依赖于第一个测试创建了对象 1,第三个测试首先创建了对象2,然后预计会失败)
更新对象2成功测试
获取对象列表测试
删除对象测试
(使用添加的 ID)
然而,测试之间没有状态,也没有明显的方式来传递(例如添加 ID 到删除测试)。
那么,单元测试复杂交互的正确方法是按场景进行吗?
例如
添加对象成功测试
(它创建一个对象,获取它来验证数据,然后删除它)
添加具有相同唯一代码测试的对象
(它创建对象 1,然后尝试创建对象 2,但失败,然后删除对象 1)
使用相同唯一代码测试更新对象
(它创建对象 1,然后创建对象 2,然后尝试更新对象 2,使其具有与对象 1 相同的唯一代码,但失败,然后删除对象 1 和对象 2)
我是不是来错了?
Thanks
单元测试的一个原则是每个测试用例应该独立于任何其他测试用例。 MSTest(以及所有其他单元测试框架)通过不保证测试运行的顺序来强制执行这一点 - 有些(xUnit.NET)甚至甚至随机化每个测试运行之间的顺序。
将单元压缩为简单的交互也是推荐的最佳实践。虽然不能提供硬性规定,但如果交互过于复杂,就不是单元测试。无论如何,复杂的测试都很脆弱,并且维护开销非常高,这就是为什么简单的测试是首选的原因。
听起来您的测试之间有共享状态的情况。这会导致相互依赖的测试,应该避免。相反,您可以编写可重用的代码来为每个测试设置前置条件状态,确保该状态始终正确。
这样的前置条件状态称为Fixture。这本书xUnit 测试模式 https://rads.stackoverflow.com/amzn/click/com/0131495054包含有关如何在许多不同场景中管理灯具的大量信息和指南。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)