c# - 我应该在 n 层应用程序中测试哪一层

标签 c# asp.net-mvc unit-testing n-tier-architecture

我有一个 4 层应用程序

1)演示(MVC)
2)服务(WCF)
3) 业务
4)数据

我的服务层中的一些方法执行许多其他子流程,例如,

public OrderResponse PlaceOrder(OrderRequest request)
{
     if (CheckForSufficientStock(request.ItemId)) {
          ReserveStock(request.ItemId);
          ProcessPayment(request.CustomerPaymentDetails);
          RemoveStockFromInventory(request.ItemId);
          ArrangeForShipping(request.CustomerDetails);
          AddToOrderHistory(request);          
     }
}

我开始学习如何编写单元测试,有几个问题

1) 我应该为哪一层编写单元测试?我是否为 MVC 项目中的 Controller 编写单元测试?或者我是否必须为服务层中的每个方法编写单元测试?还是两者兼而有之?

2) 如果我必须为 MVC 和服务层编写单元测试,我的说法对吗,我的 MVC 项目中的单元测试将测试 PlaceOrder,而测试我的服务层的单元测试将测试所有子ReserveStock、ProcessPayment 等函数?

最佳答案

通常您需要端到端测试以及单元测试。我不想解释基本概念,只是想根据我自己的经验列出一些最佳实践。

为了进行单元测试,一次只测试一层,方法是模拟它所基于的层。例如,当您测试业务层时,您应该模拟数据访问层。通过模拟下面的层,您可以在逻辑上隔离要测试的代码 stub ,而无需触及其他层。这种方法不仅易于使用,而且还可以防止测试太多东西并得到误报。您还可以准备测试夹具以确保每次运行测试时,您实际上都在进行试运行

以下是您可以用来进行单元测试的一些流行技术:

  • 要在 View 层测试 Javascipt,您可以使用 Jasmine
  • 要测试 C# 代码,您可以使用 MSTestnUnitxUnit
  • 要模拟 C# 层,您可以使用 Moq
  • 要进行端到端测试,您可以使用 Selenium

关于c# - 我应该在 n 层应用程序中测试哪一层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18007728/

相关文章:

c# - 想要得到 405 (Method Not Allowed) 而不是 404

asp.net-mvc - DotNetOpenAuth 和 Facebook

angularjs - Jasmine - 类型错误 : Unable to get property 'catch' of undefined or null reference

java - 将 bean 注入(inject)到使用 mockito 创建的模拟中

c# - C# 中带标志的 cURL 调用

c# - 对于具有不同行为的多个接口(interface)使用哪种设计模式

c# - 如何使用 C# WebAPI 2 拥有两条使用相同方法的路由

c# - 无法解析非可选依赖项

asp.net-mvc - 使用 Visual Studio 调试,ASP.NET MVC 上的 URL 错误

unit-testing - 如何测试依赖于环境变量的 Rust 方法?