使用moq和Xunit在c#中调用私有方法的测试类方法



我有以下遗留类,我想添加一些使用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设置为虚拟的,并在某些继承的类中重写它,并使用这个类进行单元测试。

最好将此方法移到其他类中,并将其作为依赖项使用。

相关内容

  • 没有找到相关文章

最新更新