我有一个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项目中为我的控制器编写单元测试?还是必须为服务层中的每个方法编写单元测试?还是两者都有?
2)如果我必须同时为MVC和服务层编写单元测试,我是否正确地说,我的MVC项目中的单元测试将测试PlaceOrder,而测试我的服务层的单元测试将测试所有的子功能,如ReserveStock、ProcessPayment等?
发布于 2013-08-02 02:49:33
通常,您需要端到端的测试以及单元测试。我不想解释基本的概念,但我只想列举一些最佳实践,从我自己的经验。
对于进行单元测试,一次只能通过模拟它所基于的层来测试一个层。例如,在测试业务层时,应该模拟数据访问层。通过模拟下面的层,您可以在逻辑上隔离您想要测试的代码存根,而无需接触其他层。这种方法不仅简单易用,而且可以防止过多的测试并得到错误的警报。您还可以准备测试夹具,以确保每次运行测试时实际执行dry run。
下面是一些可以用来进行单元测试的流行技术:
发布于 2013-08-14 18:04:31
我们都知道,单元测试意味着一次测试单个场景。您必须为所有层编写单元测试。例如,在MVC PlaceOrder方法中,您的测试用例可以是:CheckForSufficientStock输入参数是null,还是Verify每个函数都称为TimesOnce。类似地,在其他层中,例如
CheckForSufficientStock(int something)
{
...
}如果再次调用任何函数,则将遵循相同的操作,然后验证Times,返回值。Mocking需要跳过对其他层或函数的实际调用,方法是用返回值伪造它,这是继续执行下一行代码所必需的。我发现Moq最适合初学者使用。
https://stackoverflow.com/questions/18007728
复制相似问题