Как установить путь к тестовому файлу для тестов MbUnit с Gallio через NAnt?

Пожалуйста, извините за неоднозначное название; это сложно описать в одной строке.

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

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

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

(Кроме того, я не думал, что мы вообще использовали MS-Test, так почему же там есть каталог '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);
  }
}
Другие вопросы по тегам