модульный тест метод, который зависит от StreamReader для чтения файла - PullRequest
0 голосов
/ 29 августа 2018

как я могу проверить методы, которые читают файл с помощью StreamReader, Я не хочу создавать файл на жестком диске каждый раз, когда я запускаю тест, мне просто нужно sr.ReadToEnd (); быть моей ожидаемой строкой

public class ConfigStore : IConfigStore
{
    public string ReadFile(string FileName)
    {
        string result;
        using(StreamReader sr=new StreamReader(FileName) )
        {
            result= sr.ReadToEnd();
        }

        //logic to be tested
        return result+1;
    }
}

и мой тестовый класс

[TestClass]
public class UnitTest2
{
    [TestMethod]
    public void Shoud_Add_1_To_File_Content()
    {
        //arrange
        ConfigStore configStore = new ConfigStore();


        //act
        var returntype=configStore.ReadFile("config.json");

        //assert
        Assert.AreEqual ("test1",returntype);

    }
}

примечание: код только для целей тестирования, а не для реального бизнес-случая.

спасибо.

1 Ответ

0 голосов
/ 29 августа 2018

Вы можете использовать библиотеку System.IO.Abstractions , чтобы сделать ваш метод тестируемым.

Вам необходимо добавить свойство FileSystem к вашему ConfigStore классу.

// Default file system uses .NET Framework's File class
public IFileSystem FileSystem { get; set; } = new FileSystem();

Во-вторых, вам нужно использовать эту файловую систему вместо StreamReader или напрямую System.IO.File:

public string ReadFile(string FileName)
{
    return FileSystem.File.ReadAllText();
}

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

Затем последним шагом будет создание экземпляра этой поддельной файловой системы и присвоение ему ConfigStore.FileSystem, чтобы используемая вами файловая система использовалась.

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