2011-02-03 8 views
0

Прошу извинить неоднозначное название; его сложно описать в одной строке.Как установить путь к тестовому файлу для тестов MbUnit с помощью Gallio через NAnt?

В основном у нас есть тесты MbUnit, которые отлично работают с использованием TestDriven из Visual Studio, но при попытке запустить тесты с помощью задачи <gallio> из NAnt.

Неисправность связана с тестами, которые пытаются прочитать файлы; они читают файлы относительно текущего каталога, например «.. \ .. \ files \ dir \ whatever». Однако проблема заключается в том, что Gallio копирует тестовые DLL в каталог в другом месте и устанавливает текущий каталог как «% HOMEDIR% \ AppData \ Local \ Temp \ Gallio \ MSTestAdapter \ randomname \ TestDir \ Out \ something».

Итак, мой вопрос в два раза: где я должен помещать файлы, необходимые для тестирования, чтобы их можно было найти во время выполнения, и как я должен ссылаться на них из кода?

(Кроме того, я не думаю, что мы использовали MSTest на всех, так как же там приведен каталог «» MSTest там?)

ответ

1

Хотя мы используем NUnit вместо MbUnit Я думаю, что есть некоторые общие рекомендации, которые я могу дать относительно обработки файлов в модульных тестах.

Никогда не полагайтесь на пути - ни абсолютные, ни относительные. Сохраняйте контроль над путями внутри своих тестов. Это то, что мы делаем:

  1. Добавить папку Resources в тестовом проекте (так у вас есть все в одном месте)
  2. Помещенные требуются файлы там (например, MyFile.txt)
  3. Добавить файлы в свой проект по Add>Existing Item... (так что ваши файлы хранятся с источниками. Они получают развертываются впоследствии в составе сборки тестового проекта)
  4. добавить файлы к ресурсам вашего тестового проекта (вкладка Resources в свойствах проекта, Add Resource>Add Existing File...)
  5. Используйте файл в тестовом приспособлении:
    1. Определить поле пути к файлу в вашем классе арматуры (используйте Path.GetTempFileName() поскольку у вас есть уникальный путь, то и это, скорее всего, у вас есть достаточные права доступа на любой машине)
    2. Создайте локальный файл, используя путь к файлу во время установки тестового
    3. Используйте файл в тесте
    4. Удалить созданный файл во время слезы вниз

Вот пример:

[TestFixture] 
public class MyFixture 
{ 
    private static readonly string MyFilePath = Path.GetTempFileName(); 

    [SetUp] 
    public void SetUp() 
    { 
    // use File.WriteAllBytes for binary files 
    File.WriteAllText(MyFilePath, Properties.Resources.MyFile); 
    } 

    [Test] 
    public void TestSomething() 
    { 
    Assert.That(ObjectUnderTest.UseFile(MyFilePath), Is.True); 
    } 

    [TearDown] 
    public void TearDown() 
    { 
    File.Delete(MyFilePath); 
    } 
} 
+0

Да, это кажется разумным. Если бы я был _writing_ файлы в тесте, я бы использовал 'Path.GetTempFileName()' в любом случае, но я думаю, что я ленился, избегая добавления ресурсов для всех тестовых файлов, которые я _reading_! – andrewf

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

  • Нет связанных вопросов^_^