Убедитесь, что закрытый метод получает вызов Unit Test - PullRequest
0 голосов
/ 14 марта 2020

У меня есть интерфейс с методом, подобным этому:

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?

1 Ответ

4 голосов
/ 14 марта 2020

Я рекомендую создать новый интерфейс IWorker с помощью метода DoWork (), а затем внедрить его в конструктор класса, который содержит метод GetImageSr c (). В своем модульном тесте вы могли бы затем вставить фиктивный объект интерфейса и убедиться, что 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());
    }
...