Как удалить устаревшие элементы развертывания в модульных тестах?


Рассмотрим следующий тестовый класс:

[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 4

1 ответ:

DeploymentItemна самом деле S-это файлы, которые вы обычно развертываете на компьютере клиента, поэтому Вы не должны удалять их после развертывания!

Вы должны создать каталог "песочницы" для ваших модульных тестов и использовать обычные методы файловой системы .NET, такие как File.Delete, чтобы сделать ваш файл copy/access/delete.