Как установить путь к тестовому файлу для тестов MbUnit с Gallio через NAnt?
Пожалуйста, извините за неоднозначное название; это сложно описать в одной строке.
По сути, у нас есть тесты MbUnit, которые нормально работают с использованием TestDriven из Visual Studio, но терпят неудачу при попытке запустить тесты с помощью задачи
Ошибка связана с тестами, которые пытаются читать файлы; они читают файлы относительно текущего каталога, например "..\..\files\dir\what". Однако проблема, по-видимому, заключается в том, что Gallio копирует тестовые библиотеки DLL в каталог в другом месте и устанавливает текущим каталогом "%HOMEDIR%\AppData\Local\Temp\Gallio\MSTestAdapter\randomname\TestDir\Out\ кое-что".
Итак, мой вопрос состоит из двух частей: куда мне помещать файлы, необходимые для тестов, чтобы их можно было найти во время выполнения, и как я должен ссылаться на них из кода?
(Кроме того, я не думал, что мы вообще использовали MS-Test, так почему же там есть каталог 'MSTest'?)
1 ответ
Хотя мы используем NUnit вместо MbUnit, я думаю, что я могу дать несколько общих советов относительно обработки файлов в модульных тестах.
Никогда не полагайтесь на пути - ни абсолютные, ни относительные. Держите под контролем пути внутри ваших тестов. Это то, что мы делаем:
- Добавить папку с именем
Resources
к вашему тестовому проекту (чтобы у вас было все в одном месте) - Поместите туда необходимые файлы (например,
MyFile.txt
) - Добавьте файлы в ваш проект через
Add
>Existing Item...
(поэтому ваши файлы хранятся вместе с вашими источниками. После этого они будут развернуты как часть сборки вашего тестового проекта) - Добавьте файлы в ресурсы вашего тестового проекта (вкладка
Resources
в свойствах проекта,Add Resource
>Add Existing File...
) - Используйте файл в своем тестовом приспособлении:
- Определите поле пути к файлу в вашем классе приборов (используйте
Path.GetTempFileName()
поскольку у вас есть уникальный путь, и, скорее всего, у вас достаточно прав доступа на любой машине) - Создайте локальный файл, используя путь к файлу во время настройки теста
- Используйте файл в своем тесте
- Удалить созданный файл во время удаления
- Определите поле пути к файлу в вашем классе приборов (используйте
Вот образец:
[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);
}
}