验证私有方法获取调用单元测试

Verify a private method gets call Unit Test

我有一个接口,方法如下:

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

我建议使用 DoWork() 方法创建一个新接口 IWorker,然后将其注入到包含 GetImageSrc() 方法的 class 的构造函数中。在你的单元测试中,你可以注入接口的模拟对象,并验证 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 和最小起订量进行测试:

    [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());
    }