1

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

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

 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)以允许我继续但我得到一个空引用?是否可以模拟和测试这些方法,我将如何继续这样做。

4

2 回答 2

2

单元测试变得如此流行的原因之一是它被证明可以鼓励SOLID 设计原则

根据您包含的一小段代码,我认为您的困难可能来自您的GetClient(int productID)职责太多,因此您很难单独测试它们。

按照我的理解,你是:

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

我鼓励您(如果可能)尝试重构代码,而不是模拟GetClient(clientRef,ClientTypeRef)以便您可以测试其下的每个逻辑路径,以便您将客户端的加载与客户端类型的检查以及可能的一些您分组的逻辑//some other sql and codes

这应该使单独测试每个部分变得更容易,但最重要的是会使您的代码更易于维护。

于 2012-12-14T10:13:55.630 回答
1

您正在使用什么模拟框架工作?

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

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

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

于 2012-12-14T09:24:56.303 回答