Как удалить устаревшие элементы развертывания в модульных тестах?
Рассмотрим следующий тестовый класс:
[TestClass]
public class ExampleTests
{
[TestMethod]
public void FileDoesNotExists()
{
Assert.IsFalse(System.IO.File.Exists("testfile.txt"));
}
[TestMethod]
[DeploymentItem("testfile.txt")]
public void FileExists()
{
Assert.IsTrue(System.IO.File.Exists("testfile.txt"));
}
}
В зависимости от порядка, в котором выполняются эти тесты, они могут пройти, но поскольку нет никакой гарантии, что они будут выполняться в том порядке, в котором они определены, поведение реального мира недетерминировано... очевидно, это плохо.
Я посмотрел вокруг и экспериментировал с TestCleanupAttribute, но не смог найти надежный способ получить оба теста, чтобы пройти, но кажется, что должен быть простой метод, чтобы сделать это. Существует ли такой метод?
обновление: это представляется невозможным, поскольку тестовая платформа предполагает, что DeploymentItems не изменяется после развертывания и, следовательно, развертывает каждый элемент только один раз. В краткосрочной перспективе я изменил тестируемый код, чтобы больше не требовалось такое поведение, в долгосрочной перспективе я, скорее всего, реализую атрибут, который не делает этого предположения.
1 ответ:
DeploymentItem
на самом деле S-это файлы, которые вы обычно развертываете на компьютере клиента, поэтому Вы не должны удалять их после развертывания!Вы должны создать каталог "песочницы" для ваших модульных тестов и использовать обычные методы файловой системы .NET, такие как
File.Delete
, чтобы сделать ваш файл copy/access/delete.