2010-12-14 3 views
1

Я занимаюсь написанием некоторых модульных тестов, которые создают файлы.MSTest: тесты на запись в TestContext

В настоящий момент я использую TestContextTestResultsDirectory для создания создаваемого файла (результаты для утверждения). Синтаксис выглядит следующим образом:

 //Create directory 
     Directory.CreateDirectory(TestContext.TestResultsDirectory); 

     //Create file. 
     File.Create(TestContext.TestResultsDirectory + @"\Test.txt"); 

Мой вопрос в основном почему TestResultsDirectory не создается?

Когда я только что позвонил File.Create, тест завершился неудачно с DirectoryNotFoundException.

Это правильный способ использования TestContext или есть какой-либо атрибут, такой как [SetPath], который мы можем установить на уровне метода, чтобы среда выполнения создавала пути, связанные с тестированием?

+0

Технически вы не создаете «единичный тест», потому что модульные тесты выполняются изолированно и не взаимодействуют с внешними ресурсами, такими как база данных, системные часы и файловая система. – Steven

+0

Концептуально да, вы правы. Тест состоит в том, чтобы обновить текстовый файл и убедиться, что он содержит правильный текст.Для целей аудита мы должны убедиться, что «изменение» хранится в файле. Поскольку тестовый контекст генерируется во время выполнения, тесты могут выполняться любым разработчиком (это ключ для выбора тестового контекста). Немного путайте, почему в тестовом контексте есть указатели на каталоги, которые не существуют. – msuhash

+0

Где вы искали созданный каталог? Вы пробовали System.Console.WriteLine (Path.GetFullPath (Path.Combine (TestContext.TestResultsDirectory, «Test.txt»)))? – k3b

ответ

1

Я никогда не использую TestContext. В этом случае я хотел бы использовать вместо Environment.CurrentDirectory:

//Create directory 
    Directory.CreateDirectory(Path.Combine(Environment.CurrentDirectory, "SubDirectory")); 

    //Create file. 
    File.Create(Path.Combine(Environment.CurrentDirectory, "Test.txt")); 
+0

Я просто чистил некоторые тестовые примеры сегодня, которые использовали один и тот же шаблон (текущий каталог) и в итоге создали папки в корневой папке. Я использую Visual Studio 2010. – vboctor

1

Вы, вероятно, хотите использовать TestContext.ResultsDirectory вместо этого. Это, похоже, указывает на каталог, который фактически создается.

TestContext.TestResultsDirectory не создается (он имеет папку GUID на пути), и именно поэтому вы получаете DirectoryNotFoundException.

2

Я знаю, что это старая нить, но я просто сейчас узнаю об этом, и я просто наткнулся на ответ на ваш вопрос о папке TestResultsDirectory во время игры с автоматическим тестированием Visual Studio. Возможно, это поможет кому-то другому.

TestResultsDirectoryявляется создана, просто не во время теста. (@Kevin, имеющий идентификатор GUID для имени, не имеет никакого отношения к тому, можно ли создать папку, если это то, что вы подразумевали.) Я следил за созданием файлов и папок во время выполнения теста, а папка не создается до после выхода кода пользователя.

При выполнении теста, где захватывается видеоэкран (ScreenCapture.wmv) или журнал действий создается (UITestActionLog.html), результаты файлы помещаются в TestResultsDirectoryпосле того, как он был создан, который не является до тех пор, после того, как код завершения. Если ваш тест не создает эти или подобные файлы результатов, эта папка, скорее всего, не будет создана.

Как я уже сказал, я все еще изучаю тестирование Visual Studio.

ОБНОВЛЕНИЕ: Я обнаружил, что при записи видео или в журнале действий они хранятся в памяти в памяти до завершения теста. Похоже, это причина, по которой выходная папка создается после выхода кода пользователя.

Если я узнаю больше на эту тему (и если сайт позволяет мне - вы можете отредактировать ответ более одного раза?), Я обновлю этот ответ.

Смежные вопросы