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

时间:2015-10-07 13:06:39

标签: unit-testing moq xunit

我有以下遗留类,我想添加一些单元测试以使用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方法。

有人能建议最简单的方法吗?

干杯

2 个答案:

答案 0 :(得分:3)

单元测试应该是黑盒测试,因为否则您的测试会太脆弱:每次更改实现细节时,您都需要修复所有中断的测试

当您将Foo视为黑匣子时,只能看到GetStatus。事实上,私有GetRequest方法是无关紧要的。其他人明天可能会来,并决定以不再使用GetStatus方法的方式重构GetRequest实现 - 也许该方法将不再存在。

您应该测试GetStatusinstead of attempting to test implementation details的可观察行为

  

我需要模拟GetRequest方法

那是不可能的。你可以only mock interfaces and accessible virtual methods

答案 1 :(得分:1)

您是否可以访问源代码? 一种方法是使GetRequest受保护虚拟并在某些继承的类中覆盖它,并使用此类进行单元测试。

最好将此方法移动到其他类并将其用作依赖项。