Rob*_*nik 9 asp.net-mvc integration-testing system-testing
我的应用程序设计如下所示:
因此,我的数据层对数据模型实现完全透明,因为上层根本不使用数据实体.
据我所知,单元,集成和系统测试(与Asp.net MVC有关)是这样的:
我可以很容易地看到如何编写单元测试以及系统测试,但我不知道如何编写集成测试?也许我对这些的看法完全被扭曲了,我根本不理解它们.
如何为Asp.net MVC应用程序编写集成和系统测试?
或者任何.net应用程序?
假设我有以下课程:
TaskController 打电话给 TaskServiceTaskService 打电话给 TaskRepositoryTaskRepository 在内部操纵EF数据所以这是我的(缩写)类:
public class TaskController
{
private ITaskService service;
// injection constructor
public TaskController(ITaskService service)
{
this.service = service;
}
// default constructor
public TaskController() : this(new TaskService()) {}
public ActionResult GetTasks()
{
return View(this.service.GetTasks());
}
...
}
public class TaskService : ITaskService
{
private ITaskRepository repository;
// injection constructor
public TaskService(ITaskRepository repository)
{
this.repository = repository;
}
// default constructor
public TaskService() : this(new TaskRepository()) {}
public IList<Task> GetTasks()
{
return this.repository.GetTasks();
}
...
}
public class TaskRepository : ITaskRepository
{
public IList<Task> GetTasks()
{
// code that gets tasks from EF and converts to Task POCOs
}
...
}
Run Code Online (Sandbox Code Playgroud)
单元测试很简单,看起来像这样:
public void UnitTest()
{
var mock = new Mock<ITaskService>();
// other code that mocks the service
TaskController controller = new TaskController(mock.Object);
// do the test
}
Run Code Online (Sandbox Code Playgroud)
但是当涉及到集成测试时,我如何仅模拟集成的某些部分.
public void IntegrationTest()
{
// no mocking at all
TaskController = new TaskController();
// do some testing
}
Run Code Online (Sandbox Code Playgroud)
首先,我不能在这里模拟数据库?我可以模拟存储库,但有真正的服务和控制器...
集成测试应该测试组件之间的集成.虽然单元测试测试单个组件的各个部分,但集成测试组件之间的交互,并且旨在实时工作.因此,集成测试将利用数据库和任何其他外部依赖项,最好在单元测试中模拟这些服务.
对我来说,系统测试将是功能测试(使用类似的东西进行另一级测试),或者通过testcomplete或telerik的QA工具等工具进行ui测试.
HTH.
| 归档时间: |
|
| 查看次数: |
2629 次 |
| 最近记录: |