重载方法的单元测试

时间:2012-12-14 09:19:09

标签: c# unit-testing

我一直在努力为我们的一些代码编写一些单元测试,我正在努力解决这个问题:

我们有一个我们重载的方法,它是这样的:

 Public Client GetClient(int productID)
 {
  //Some sql that evaluate a client

  if(!GetClient(clientRef,ClientTypeRef))
   Return Client.UnknownClient;
    //some other sql and codes
  Return Client.CustomerClient;
  }

问题是如何处理这个问题,在我的测试中,我尝试将模拟添加到GetClient(clientRef,ClientTypeRef)并返回一个OK客户端(Client.UnknownClient以外的其他任何东西)以允许我继续但是我我得到一个空引用?是否有可能模拟和测试这些方法,我将如何继续这样做。

2 个答案:

答案 0 :(得分:2)

单元测试变得如此受欢迎的一个原因是它被证明鼓励SOLID design principles

根据您所包含的一小段代码,我认为您的问题可能来自于GetClient(int productID)有太多责任这样的事实,因此您正在努力单独测试它们。< / p>

我理解的方式是:

  • 从数据库加载客户端(按产品标识?)
  • 检查(复杂的逻辑涉及对数据库的更多查询?)它是什么类型的客户端

我会鼓励你(如果可能的话)尝试重构你的代码,而不是模仿GetClient(clientRef,ClientTypeRef)以便你可以测试它下面的每个逻辑路径,这样你就可以将客户端的加载与检查客户端的类型,也可能是您在//some other sql and codes下分组的一些逻辑。

这样可以更容易地分别测试每个部分,但最重要的是会使您的代码更易于维护。

答案 1 :(得分:1)

你使用什么模拟框架工作?

我使用moq来模拟这种方法,你会做类似

的事情
 _mockClientRepository.Setup(x => x.GetClient(It.IsAny<int>(),It.IsAny<int>())).Returns(Client.CustomerClient);

基本上这意味着传递给方法的任何整数都将返回Client.CustomerClient