2009-10-14 3 views
5

Все: У меня есть единичный тест, который тестирует функциональность, которая требует входного файла. Этот тест был построен с использованием встроенной функции тестирования VS 2008.Тестирование модуля с входным файлом

Моя проблема заключается в том, что файл должен быть доступен для обнаружения посредством модульного теста. Однако, когда тест выполняется, он запускается из временного «выходного» каталога в папке результатов теста. Он не может найти мой входной файл.

Я добавил файл к проектному модулю проекта с компиляцией «none» и копией для вывода опции каталога «copy if newer», но копия происходит в обычном каталоге вывода VS (в bin), а не в каталог выполнения тестового исполнения, поэтому файл не найден. Я не хочу жестко указывать пути к файлу, так как тест должен выполняться для всех, кто проверяет модульный тест. Я мог бы поместить входной файл в папку решения, и пусть тестовый код «обнаружит» файл путем жесткого кодирования относительного пути резервного копирования дерева, но я решил, что это должно быть общей проблемой, поэтому я хотел проверить, чего-то не хватает.

ответ

4

Добавить файл в качестве ресурса в тестовую сборку. Затем вы можете загрузить его во время выполнения через Assembly.GetManifestResourceStream в своей тестовой настройке.

Вот удобный метод я использую для загрузки ресурсов:

public static class ResLoader 
{   
    public static string AsString<T>(string resName) 
    { 
     using (var reader = new StreamReader(Assembly.GetAssembly(typeof(T)) 
           .GetManifestResourceStream(resName))) 
     { 
      return reader.ReadToEnd(); 
     } 
    } 
} 

Т любого класса, содержащийся в тестовой сборке.

3

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

Смежные вопросы