Как установить путь к файлу теста для тестов MbUnit с Gallio через NAnt? - PullRequest
0 голосов
/ 03 февраля 2011

Прошу прощения за двусмысленный заголовок; это сложно описать в одной строке.

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

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

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

(Кроме того, я не думал, что мы вообще использовали MS-Test, так почему же там есть каталог 'MSTest'?)

1 Ответ

1 голос
/ 04 февраля 2011

Хотя мы используем 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);
  }
}
...