我刚刚开始使用MSTests为我的asp.net应用程序编写selenium测试(我使用了NUnit,但我没有看到它和ms之间有任何区别......)我喜欢它们所以远,除了随机试射的部分。
现在我得到了测试不应该依赖于其他测试的部分(!!!),但是如果你的测试随机发射并且他们不依赖于彼此,你将如何测试添加,更新,删除功能?
我只能看到两种方法来编写这样的测试:
答案 0 :(得分:0)
有序测试不是一个好主意,因为在多核处理器中我们可以同时运行多个测试。这在构建服务器的情况下非常有用,并且可以帮助测试快速有效地运行。订购的测试用例无论如何都会破坏而不是一个好主意。
选项2是首选方法,但我不会称它们为大。因为除了您正在测试的类/功能之外,应该进行模拟。如果你正在嘲笑它们并且写得正确,它们只会包含
我的意思是,如果所有依赖项都被正确模拟,那么每个测试用例都会很小并且可以在半秒内执行。
简而言之,您的单元测试将由3个部分组成,它们应该相互独立。
修改强>
我很遗憾地说,如果您使用的是测试数据库,则会失去单元测试的目的。单元测试是无状态的,应该是模块化的。您应该只能测试应用程序功能的一小部分,而不依赖于其他模块。您应该从应用程序逻辑中单独测试DAL层/数据库访问代码。数据库是有状态的,如果您将单元测试绑定到依赖于数据库,那么您正在集成两个不同的组件,并使其成为一种集成测试,这将使执行更长,更大,这可能是长期运行中的问题。
现在你可以继续使用选项2.但是如果你想要一个更好的单元测试套件,你仍然需要考虑使用模拟并将数据库的依赖性与单元测试分开,这将是未来的问题。您仍然可以做的是您可以在更高级别编写集成测试,仅在集成上进行20%的编写,其余80%专注于单元测试。这样,您将获得更快的测试用例,涵盖大多数功能并且更易于维护。您可以在剩余的20%上进行妥协,这些更大的集成测试和更昂贵的维护。
答案 1 :(得分:0)
我知道这违反了一般做法,但我发现在测试的默认顺序方面存在依赖关系。
在现实世界中,如果您要进行端到端测试,用例几乎总是按照添加顺序 - >编辑 - >删除。用户可能至少90%的时间都会经历此用户旅程。我发现以同样的方式自动化测试以覆盖这些类型的赔率没有问题。
另一种替代方法是使用足够的对象填充数据库,以便测试可以彼此独立运行。
答案 2 :(得分:0)
测试不应该依赖于其他测试,它们应该是独立的。最重要的原因是测试工具的稳定性以及测试失败时您应该/将如何反应。您不想开始调试以发现“更新”测试失败,因为其他一些测试失败了......!
与@Phil建议人口一样,数据库可能是一种前进的方式。当然,这也可能是错误的来源。
另一种方法是为您的测试代码提供“管理”方法/端点,例如可以创建帐户(或您的系统处理的资源)并使它们处于正确的状态以进行实际测试。当然,“管理”功能也会成为错误的来源。
确保良好稳定的Selenuim测试并不容易。祝你好运!
答案 3 :(得分:0)
我发现以下内容在测试数据库项目时有效: