我有以下遗留类,我想添加一些使用Xunit和Moq的单元测试
我要测试的类的psuedo代码如下:-public class Foo : IFoo
{
public StatusResposne GetStatus(string jobId)
{
.
.
var response = GetRequest(doc, targeturl);
.
.
}
private XDocument GetRequest(XDocument doc, string url)
{
}
}
现在我想测试GetStatus,但为了做到这一点,我需要模拟GetRequest方法。
谁能建议最简单的方法来做到这一点?欢呼
单元测试应该是黑盒测试,否则你的测试就太脆弱了:每次你改变一个实现细节,你都需要修复所有的测试。
当您将Foo视为黑盒时,只有GetStatus
是可见的。存在私有GetRequest
方法的事实是无关紧要的。明天可能会有人过来,决定重构GetStatus
实现,这样GetRequest
方法就不再使用了——也许那个方法将不再存在。
你应该测试GetStatus
的可观察行为,而不是试图测试实现细节。
我需要模拟GetRequest方法
那不可能。您只能模拟接口和可访问的虚拟方法。
您能访问源代码吗?一种方法是将GetRequest protected设置为虚拟的,并在某些继承的类中重写它,并使用这个类进行单元测试。
最好将此方法移到其他类中,并将其作为依赖项使用。