модульное тестирование функции записи файлов - PullRequest
3 голосов
/ 16 мая 2011

У меня есть функция, которая будет принимать данные учащихся в качестве входных данных и записывать их табель успеваемости в файл XML. Когда я попытался создать модульные тесты в vs2008, я увидел сообщение: «Метод, который не возвращает значение, невозможно проверить». Моя функция не возвращает значение, которое она просто записывает в файл и возвращает.

Как мне написать тесты для этой функции?

[TestMethod()]
public void StoreInformationTest()
{
   StudentSettings target = new StudentSettings(); // TODO: Initialize to an appropriate   
   StudentSettings settings = null; // TODO: Initialize to an appropriate value
   target.StoreInformation(settings);
   Assert.Inconclusive("A method that does not return a value cannot be verified.");
}

Заранее спасибо,

С уважением, John

Ответы [ 4 ]

2 голосов
/ 16 мая 2011

Прежде всего, если большой дядя Visual Studio скажет вам, что ваш метод не может быть проверен, он не обязательно должен быть истинным.

Вы должны вернуть выходные данные для записи в файл в виде строкиили ваш метод должен принимать TextWriter в качестве параметра.В первом случае вы можете использовать макетную среду, как упоминалось в другом ответе, чтобы дать тестируемому методу поддельный объект TextWriter.

2 голосов
/ 16 мая 2011

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

ОБНОВЛЕНИЕ:
Спасибо за код.Похоже, ваш класс StudentSettings делает много.Разделите функции записи XML в свой собственный класс, извлеките интерфейс из него и вставьте его в свой класс в качестве аргумента конструктора.Затем вы можете заменить его своим собственным макетом во время тестов.

1 голос
/ 16 мая 2011

Вы можете использовать насмешливый фреймворк для этого. Хорошим примером является Moq . Проще говоря, вы можете создавать поддельные объекты, и вы говорите им вести себя как другие. Вы также можете проверить, как часто и как вызывается метод, если он вызывается и как часто он должен вызываться.

EDIT: Краткое руководство, показанное здесь , здесь содержит несколько хороших примеров, которые, вероятно, прямо направят вас. В вашем случае вы можете создать moq вашего класса, содержащий функцию, которая записывает ваш файл. С помощью функции проверки вы можете проверить / проверить, как часто вызывается функция и работает ли она без каких-либо исключений.

0 голосов
/ 16 мая 2011

Генератор кода просто предполагает, что он не может проверить ваш тест на основе его возвращаемого значения (void), что имеет смысл.Я думаю, что кто-то еще упомянул, что это больше заполнитель.Когда дело доходит до написания теста, вам нужно решить, каковы ваши критерии прохождения.Вы можете пойти так же просто, как;

Assert.IsTrue(File.Exists(filePath));

Если все, что вас волнует, - это существующий файл или вы можете углубиться в него, проверить его содержимое и так далее.Это действительно зависит от вас.

...