Я не слишком долго кодировал, поэтому извиняюсь, если это не очень хорошо сочленено.Как проверить функции с помощью методов File.Create() и File.Delete() в xunit?
Итак, я пытаюсь использовать конструкторы и IDisposable
, чтобы написать модульные тесты в xunit, которые проверяют некоторые функции, связанные с созданием и удалением файлов. Первоначально я начал писать тесты без какого-либо эквивалента «setup»/«teardown», но я столкнулся с проблемой прохождения тестов при первом запуске, но неудача во втором раунде, поскольку файл, который я тестировал, мог быть удален, был уже удален в предыдущий пример запуска теста! Итак, теперь я пытаюсь включить в свой конструктор методы типа File.Create («путь к файлу»), «File.Delete (« путь к файлу »)», но обнаруживаю, что мои тесты все ломаются, как только Я включаю один из этих методов. Это не происходит с «Directory.CreateDirectory()» или «Directory.Delete()».
В качестве примера, вот пример рода вещи я пытался с помощью конструктора ...
public class SetUp : IDisposable
{
protected SetUp()
{
Directory.CreateDirectory(@"c:\Projects\Tests\Test");
File.Create(@"c:\Projects\Tests\test.txt");
}
public void Dispose()
{
Directory.Delete(@"c:\Projects\Tests\Test", true);
File.Delete(@"c:\Projects\Tests\test.txt");
}
}
Это необходимо для следующего теста:
[Theory]
[InlineDataAttribute(@"c:\Projects\Tests\test3.txt")]
public void CanRemoveFile(string filePath)
{
//Assign
var myInstanceOfApphelper = new AppHelper();
bool fileExists = true;
//Act
myInstanceOfApphelper.RemoveFile(filePath);
fileExists = myInstanceOfApphelper.CheckFileExists(filePath);
//Assert
Assert.Equal(false, fileExists);
}
.. .as без этой части конструктора для создания файла перед запуском тестов, в следующий раз в этом месте не будет файлов, которые будут удалены, когда я запустил тест, и он не сработает. Однако, как только я включаю строку File.Create(@"c:\Projects\Tests\test.txt");
, все мои тесты прерываются. Ошибки я возвратили все
«Процесс не может получить доступ к файлу„C: \ Projects \ Тесты \ test.txt“. , так как он используется другим процессом»
но я не могу понять это, так как большинство тестов не используют 'c: \ Projects \ Tests \ test.txt в любом случае!
Может ли кто-нибудь сказать мне, почему это не сработает? Как я могу протестировать создание и удаление файлов в инфраструктуре xunit таким образом, чтобы тесты проходили последовательно? Можете ли вы указать на очевидные ошибки в том, как я это написал?
Как вы используете свой класс 'Setup'? Я не вижу, что вы на самом деле используете его в тесте. –
У меня иногда возникают проблемы. Я обнаружил, что использование объекта 'System.IO.FileInfo' для создания и удаления файлов работает лучше, чем использование статических методов' File.Create' и 'File.Delete'. –
Вы также можете проверить, что каталог не доступен только для чтения, как это обычно бывает, если VS помещает ваши скомпилированные исполняемые файлы. –