我有一个 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# 代码,您可以使用 MSTest、nUnit、xUnit
- 要模拟 C# 层,您可以使用 Moq
- 要进行端到端测试,您可以使用 Selenium
关于c# - 我应该在 n 层应用程序中测试哪一层,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18007728/