【问题标题】:Verify a private method gets call Unit Test验证私有方法是否调用单元测试
【发布时间】:2020-03-14 19:59:31
【问题描述】:

我有一个这样的方法的接口:

public string GetImageSrc(string input);

实现如下:

    public string GetImageSrc(string input)
    {
        if (input.ContainsImage())
        {
               DoWork();
        }
        return input;
    }

我对 ConatinsImage 的字符串扩展名是:

    public static bool ContainsImage(this string input)
    {
        if (!string.IsNullOrEmpty(input))
        {
            return input.Contains("img");
        }
        return false;
    }

DoWork 是类中的私有方法。我正在为该类编写单元测试 - 我将 null 传递给该方法并断言返回 null。但是,有没有一种方法可以断言对空输入的 DoWork 私有方法的调用为 None?

【问题讨论】:

标签: c# .net unit-testing moq


【解决方案1】:

我建议使用 DoWork() 方法创建一个新接口 IWorker,然后将其注入到包含 GetImageSrc() 方法的类的构造函数中。在您的单元测试中,您可以注入接口的模拟对象,并验证是否调用了 DoWork():

public interface IWorker
{
    void DoWork();
}

public class YourClass
{
    private readonly IWorker _worker;

    public YourClass(IWorker worker)
    {
        _worker = worker;
    }

    public string GetImageSrc(string input)
    {
        if (input.ContainsImage())
        {
            _worker.DoWork();
        }
        return input;
    }
}

使用 Microsoft.VisualStudio.TestTools.UnitTesting 和 Moq 进行测试:

    [TestMethod]
    public void GetImageSrc_GivenNull_ReturnsNull_And_WorkerNotCalled()
    {
        var mockWorker = new Mock<IWorker>();

        var testSubject = new YourClass(mockWorker.Object);
        var response = testSubject.GetImageSrc(null);

        Assert.IsNull(response);
        mockWorker.Verify(x => x.DoWork(), Times.Never());
    }

【讨论】:

猜你喜欢
  • 2018-08-31
  • 1970-01-01
  • 1970-01-01
  • 2013-01-30
  • 2019-03-20
  • 1970-01-01
  • 2014-08-10
相关资源
最近更新 更多