Как управлять модульным тестом для функций, требующих загрузки файлов - PullRequest
0 голосов
/ 07 июня 2019

У меня есть класс, имеющий функцию, которая получает файл xml и загружает с диска файл xsd для генерации HTML-кода.

Я хочу построить модульный тест, какой тест он отправляет xml.

Проблема в том, что модульный тест и основное приложение находятся в разных папках, поэтому основная функция не может загрузить файл xsd с диска, поскольку относительный путь отличается.

1 Ответ

0 голосов
/ 07 июня 2019

Вы можете изменить свой код так, чтобы вводился xsd.Вы также можете использовать MS Fakes для предоставления xsd из вашего тест-кода.

Небольшой пример псевдо-кода, если вы выбираете MS Fakes, это может выглядеть так:

public class SoftwareUnderTest()
{

    private void ThisDoesSomethingWithXSD()
    {
        var fil = File.Open(ApplicationDirectory + "\myxsd.xsd");
    }
}

[TestClass]
public class TestCode()
{
    [TestMethod]
    public void Test()
    {
        using (ShimsContext.Create())
        {
            // Arrange:
            // Shim DateTime.Now to return a fixed date:
            System.Fakes.ShimFile.Open =
                () => { return File.Open("\\Testpath\text.xsd"); };

            // Instantiate the component under test:
            var sUT = new SoftwareUnderTest();

            //ACT
            //ToDo: write your testcode

            //Assert
        }
    }
}

Инъекция немногопроще, как указано ниже, но для его тестирования требуется изменение кода, что усложняет использование вашего класса:

public class SoftwareUnderTest(string xsdPath)
{

    private void ThisDoesSomethingWithXSD()
    {
        var fil = File.Open(xsdPath);
    }
}

[TestClass]
public class TestCode()
{
    [TestMethod]
    public void Test()
    {
        // Instantiate the component under test:
            var sUT = new SoftwareUnderTest("\\Testpath\text.xsd");

            //ACT
            //ToDo: write your testcode

            //Assert
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...