Как выполнить модульное тестирование метода, у которого fileName является параметром - PullRequest
1 голос
/ 28 марта 2012

У меня есть следующий метод:

public static IEnumerable<Customer> GetStuff(string fileName,int filterValue)

Как бы вы протестировали это?Очевидно, у меня проблема с параметром fileName.

Спасибо!

Ответы [ 3 ]

2 голосов
/ 28 марта 2012

Я бы лично пошел за изменение метода на что-то более общее, например

public static IEnumerable<Customer> GetStuff(Stream dataStream,int filterValue)

Это даст вам возможность использовать фиктивный поток или MemoryStream вместо FileStream для извлечения данных и правильного модульного тестирования. Кроме того, я лично предлагаю сделать методы настолько общими, насколько они могут быть (Stream против filePath - хороший пример).

2 голосов
/ 28 марта 2012

Чтобы сделать еще одну попытку ответа: я думаю, что JollySin столкнулся с проблемой, но не объяснил достаточно (ИМХО)

Вы, похоже, взяли fileName и попали в файловую систему системы в вашей GetStuffметод.И это проблема, если вы хотите протестировать его.Вы должны запихнуть то, что вы делаете с файловой системой (открытие / создание / чтение файлов и т. Д.) В интерфейс или что-то еще, а затем высмеивать это.Примером может быть:

public interface IMyFileIO
{
    public byte[] ReadFromFile(int bytes); // whatever
}

public static IEnumerable<Customer> GetStuff(IMyFileIO file, int filterValue)
{
}

И затем использовать mocking-frameworks (например, MOQ ) для насмешки IMyFileIO:

[Test]
public void TestFileIO()
{
   var mock = new Mock<IMyFileIO>();
   mock.Setup(foo => foo.ReadFromFile(2)).Returns(new byte[]{2,3});

   var myResult = MyClass.GetStuff(mock.Object, 10);
   Assert. // <- what you need to check
}

Обратите внимание, чтов зависимости от того, что вы делаете, высоки шансы, что уже есть интерактивный / базовый класс, предоставляющий необходимую вам функциональность (StreamWriter, что угодно)

0 голосов
/ 28 марта 2012

Я предполагаю, что проблема в том, что метод отправляется в файловую систему для получения файла? В качестве предварительного условия для теста я бы на самом деле создал файл для вашего метода для получения ... Затем вы можете передать вновь созданное имя файла в ваш тест. В этот момент он становится интеграционным тестом, но все еще действителен для тестирования. Это просто не «чистый» модульный тест

...