Asp.net mvc 如何为回归测试构建依赖测试

Asp.net mvc 如何为回归测试构建依赖测试,asp.net-mvc,msbuild,nunit,regression-testing,Asp.net Mvc,Msbuild,Nunit,Regression Testing,我有一个ASP.Net MVC项目,我想我可以使用诸如MS Test或NUnit之类的工具来执行从控制器层到数据库的回归测试,但是我遇到了一个问题,即测试不是为了在MS Test中使用有序测试而设计的,但是测试仍然并发运行,另一个问题是如何允许从一个测试创建的数据可供另一个测试访问 我看过Selenium和WatiN,但我只是想写一些不依赖于UI层的东西,这很可能会改变并增加维护测试的工作量 有什么建议吗?这只是工作的错误工具吗?我应该只使用Selenium/WatiN吗?测试应该始终相互独立,

我有一个ASP.Net MVC项目,我想我可以使用诸如MS Test或NUnit之类的工具来执行从控制器层到数据库的回归测试,但是我遇到了一个问题,即测试不是为了在MS Test中使用有序测试而设计的,但是测试仍然并发运行,另一个问题是如何允许从一个测试创建的数据可供另一个测试访问

我看过Selenium和WatiN,但我只是想写一些不依赖于UI层的东西,这很可能会改变并增加维护测试的工作量


有什么建议吗?这只是工作的错误工具吗?我应该只使用Selenium/WatiN吗?

测试应该始终相互独立,这样运行顺序就不重要了。如果您的测试依赖于其他测试,您将失去对测试内容的控制。

WatiN,我假设Selenium不会解决您的订购问题。我使用WatiN和NUnit实现UI自动化,运行顺序无法保证,这一点最初与您看到的问题类似

按照dskh的回答,您需要独立的测试,我已经用两种方法来进行集成/回归黑盒测试

首先:在测试设置中,设置任何前提条件数据值,以便处于已知的良好状态。对于系统回归测试自动化,我有许多数据库脚本,它们被调用以将数据重置为已知状态;这增加了一些依赖性,因此请注意设计。注意:在直接的单元测试中,请注意使用模拟对象去除依赖项,并让您的测试测试一件事。如果可以的话,模拟对象、存根方法调用等是一种方法,这听起来很可能是基于您的问题

第二:在某些情况下,某些东西绝对必须以某种方式进行设置,并将它们编写为测试设置添加了大量必要的系统内部知识,例如:所有用户设置+所有权限设置+等等,在它们自己的名称空间中设置了少量引导测试,以允许通过NUnit轻松运行,引导系统。保持测试数量少,确保测试非常稳定是至关重要的。现在,在新安装上,引导测试首先运行,并作为高级冒烟测试;如果任何引导测试失败,则不会运行进一步的测试。在某些方面它是笨重的,但替代方案更笨重或更耗费时间/资源/任何东西。

更新 下面的链接,我假设这个项目已经死了。 最好的选择可能是使用Selenium和页面对象模型。 请看这里:

旧答案 我找到的最简单的解决方案是Rob Conry的Qixote:

它通过触发http请求和使用响应来工作。
易于设置和使用,并提供集成测试。该工具还允许执行一系列测试,以创建测试相关性。

我理解这是单元测试的普遍共识,但实际上,就我而言,测试相关性是一件好事,因为它意味着测试彼此测试。例如,我可以为函数A编写测试A,为函数B编写测试B。如果测试A和B是独立的,那么它们都可以通过,但是如果它们是依赖的,并且测试A创建的数据对测试B无效,那么测试B将失败,因此测试B正在测试测试A的结果。您可能会说,但这意味着测试A不完整,正确,但是有人会声称有无bug测试吗?如果我可以的话,为什么没有无bug代码呢?在这种情况下,我会说你有测试A和测试B,然后你有测试C,它是测试A+测试B,测试D是测试B+测试A。使用通用代码,C和D应该直接编写。随机运行测试肯定会测试各种不同功能之间的交互方式,但会产生不一致的结果、不必要的测试用例,例如,两个不相关的功能在彼此之后运行,这将使跟踪问题变得更加困难更不用说大多数测试框架的设计理念是测试相互独立,因此使它们相互依赖需要更多的工作。如果我扩展这个逻辑,如果我有测试A,测试B。。。测试N和测试N可能取决于之前任何测试的结果,那么我应该有一个测试,包括前面所有的测试。这就是我的问题的答案,创建一个包含所有相关测试用例的测试。对不起,我记下了你的回答,因为我相信它只与单元测试相关,而我的问题与回归测试相关。回归的独立测试毫无意义。这就像测试一辆汽车的所有单个组件,但不测试汽车组装后的启动和驾驶。从UI层进行测试虽然更复杂,但提供了大量的价值回报。有一个很大的问题
说明:是的,看起来罗布已经放弃了这个项目。看起来有一些很好的工具与Selenium结合,并公开页面对象模型来创建可维护的回归测试。看看这里