首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >应该在n层应用程序中测试哪一层?

应该在n层应用程序中测试哪一层?
EN

Stack Overflow用户
提问于 2013-08-02 02:21:53
回答 2查看 1.7K关注 0票数 1

我有一个4层的应用程序

1)介绍(MVC)

2)服务(WCF)

3)商业

4)数据

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

代码语言:javascript
运行
复制
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等?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2013-08-02 02:49:33

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

对于进行单元测试,一次只能通过模拟它所基于的层来测试一个层。例如,在测试业务层时,应该模拟数据访问层。通过模拟下面的层,您可以在逻辑上隔离您想要测试的代码存根,而无需接触其他层。这种方法不仅简单易用,而且可以防止过多的测试并得到错误的警报。您还可以准备测试夹具,以确保每次运行测试时实际执行dry run

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

  • 要在视图层中测试Javascipt,可以使用Jasmine等
  • 要测试C#代码,可以使用MSTest、nUnit、xUnit
  • 要模拟C#层,可以使用Moq
  • 要完成端到端的测试,可以使用Selenium
票数 4
EN

Stack Overflow用户

发布于 2013-08-14 18:04:31

我们都知道,单元测试意味着一次测试单个场景。您必须为所有层编写单元测试。例如,在MVC PlaceOrder方法中,您的测试用例可以是:CheckForSufficientStock输入参数是null,还是Verify每个函数都称为TimesOnce。类似地,在其他层中,例如

代码语言:javascript
运行
复制
CheckForSufficientStock(int something)
{
...
}

如果再次调用任何函数,则将遵循相同的操作,然后验证Times,返回值。Mocking需要跳过对其他层或函数的实际调用,方法是用返回值伪造它,这是继续执行下一行代码所必需的。我发现Moq最适合初学者使用。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18007728

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档