我有以下遗留类,我想添加一些单元测试以使用Xunit和Moq
我要测试的类的伪代码如下: -
public class Foo : IFoo
{
public StatusResposne GetStatus(string jobId)
{
.
.
var response = GetRequest(doc, targeturl);
.
.
}
private XDocument GetRequest(XDocument doc, string url)
{
}
}
现在我想测试GetStatus,但为了做到这一点,我需要模拟GetRequest方法。
有人能建议最简单的方法吗?
干杯
答案 0 :(得分:3)
单元测试应该是黑盒测试,因为否则您的测试会太脆弱:每次更改实现细节时,您都需要修复所有中断的测试
当您将Foo视为黑匣子时,只能看到GetStatus
。事实上,私有GetRequest
方法是无关紧要的。其他人明天可能会来,并决定以不再使用GetStatus
方法的方式重构GetRequest
实现 - 也许该方法将不再存在。
您应该测试GetStatus
,instead of attempting to test implementation details的可观察行为。
我需要模拟GetRequest方法
那是不可能的。你可以only mock interfaces and accessible virtual methods。
答案 1 :(得分:1)
您是否可以访问源代码? 一种方法是使GetRequest受保护虚拟并在某些继承的类中覆盖它,并使用此类进行单元测试。
最好将此方法移动到其他类并将其用作依赖项。