我一直在努力为我们的一些代码编写一些单元测试,我正在努力解决这个问题:
我们有一个我们重载的方法,它是这样的:
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
以外的其他任何东西)以允许我继续但是我我得到一个空引用?是否有可能模拟和测试这些方法,我将如何继续这样做。
答案 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