Asp.net mvc CRUD Web应用程序中的自动测试示例?

Asp.net mvc CRUD Web应用程序中的自动测试示例?,asp.net-mvc,entity-framework,unit-testing,crud,Asp.net Mvc,Entity Framework,Unit Testing,Crud,我有一个web应用程序,主要是CRUD,但也有一些业务逻辑。 我正在使用ORM(实体框架)和域、服务和UI(ASP.NETMVC)层 我希望为这个应用程序添加自动测试 是否有一些开源应用程序演示了执行以下操作的最佳实践: 单元测试 集成测试 用户界面测试 在一个应用程序中 非常简单的案例有很多代码示例,但在现实世界中使用的“非简单”应用程序又如何呢。我将描述我在这里所做的工作,但不认为这是正确的方法-仅描述我的经验: 我使用NUnit编写数据访问层的所有单元测试,使用SQLite db“模拟

我有一个web应用程序,主要是CRUD,但也有一些业务逻辑。 我正在使用ORM(实体框架)和域、服务和UI(ASP.NETMVC)层

我希望为这个应用程序添加自动测试

是否有一些开源应用程序演示了执行以下操作的最佳实践:

  • 单元测试
  • 集成测试
  • 用户界面测试
在一个应用程序中


非常简单的案例有很多代码示例,但在现实世界中使用的“非简单”应用程序又如何呢。

我将描述我在这里所做的工作,但不认为这是正确的方法-仅描述我的经验:

我使用NUnit编写数据访问层的所有单元测试,使用SQLite db“模拟”数据库。这样,所有数据库调用都是真实的,但数据库在内存中,因此在运行测试时仍然可以获得良好的性能。每个数据访问方法都应该在这里进行彻底的测试

使用NUnit再次测试我的业务功能,但使用Moq模拟所有数据访问操作。如果您正在缓存业务层中的任何内容(如我所做的),您可以插入内存中的缓存类,而不是真正的缓存类,以确保正确地将内容放入缓存中

尽管许多人喜欢为他们的控制器这样做,但我更喜欢使用像Selenium这样的前端测试工具来“记录”我的单元测试,并随后将它们转换为代码。Selenium是测试真实世界功能的伟大工具,而不仅仅是孤立于其他情况的特定情况。您可以使用相关的Firefox插件记录系统中的所有主要功能,并规划您的断言(例如,单击按钮A将我带到页面B,在那里我可以看到我的“谢谢”消息)。Selenium也是一个运行自动化前端单元测试的好工具。您可以将测试转换为C#代码,并在夜间构建期间通过您选择的持续集成工具运行它们(我使用TeamCity,效果很好),或者,根据应用程序的大小,有几种web应用程序将您的selenium脚本作为输入,并以半自动方式运行它们

澄清一下:将上面的所有测试(数据访问、业务层、前端测试)作为NUnit测试,并设置一个简单的CI工具每天晚上运行它们,这很好。通过这种方式,您可以知道在您提交代码的那一刻或每天早上在办公室遇到的情况是否发生了故障


很抱歉,这不是您想要的示例,但我认为它可以帮助您解决问题。

我将描述我在这里所做的事情,但不要假设这是正确的做法-仅描述我的经历:

我使用NUnit编写数据访问层的所有单元测试,使用SQLite db“模拟”数据库。这样,所有数据库调用都是真实的,但数据库在内存中,因此在运行测试时仍然可以获得良好的性能。每个数据访问方法都应该在这里进行彻底的测试

使用NUnit再次测试我的业务功能,但使用Moq模拟所有数据访问操作。如果您正在缓存业务层中的任何内容(如我所做的),您可以插入内存中的缓存类,而不是真正的缓存类,以确保正确地将内容放入缓存中

尽管许多人喜欢为他们的控制器这样做,但我更喜欢使用像Selenium这样的前端测试工具来“记录”我的单元测试,并随后将它们转换为代码。Selenium是测试真实世界功能的伟大工具,而不仅仅是孤立于其他情况的特定情况。您可以使用相关的Firefox插件记录系统中的所有主要功能,并规划您的断言(例如,单击按钮A将我带到页面B,在那里我可以看到我的“谢谢”消息)。Selenium也是一个运行自动化前端单元测试的好工具。您可以将测试转换为C#代码,并在夜间构建期间通过您选择的持续集成工具运行它们(我使用TeamCity,效果很好),或者,根据应用程序的大小,有几种web应用程序将您的selenium脚本作为输入,并以半自动方式运行它们

澄清一下:将上面的所有测试(数据访问、业务层、前端测试)作为NUnit测试,并设置一个简单的CI工具每天晚上运行它们,这很好。通过这种方式,您可以知道在您提交代码的那一刻或每天早上在办公室遇到的情况是否发生了故障

很抱歉,这不是您要找的示例,但我认为它可以帮助您