Visual Studios Unit Test Файл Путь раздражения - PullRequest
3 голосов
/ 25 февраля 2012

Я использую MS Unit Tests в VS2010.

Я создал класс, который читает файл ... просто статический список слов. Файл был добавлен в основной проект, а тестовый проект в качестве содержимого, а в качестве события сборки выбрано «Копировать всегда».

Однако, когда я запускаю модульный тест, он ищет файл в выходном каталоге модульного теста. Как вы делаете это выглядит в каталоге bin. Я не хочу связываться с абсолютными путями к файлам только для тестирования ...

Test method RequiredServicesTest.RequiredServices_JamesTest.Number2WordsTest threw exception:



Test method RequiredServicesTest.RequiredServices_JamesTest.Number2WordsTest threw exception: 
System.IO.FileNotFoundException: Could not find file E:\scomA3proj\TestResults\James_JAMES-PC 2012-02-24 21_22_17\Out\randomdictionary.txt.

Обновление: я забыл упомянуть, что это проект библиотеки служб WCF.

Ответы [ 4 ]

4 голосов
/ 25 февраля 2012

Пожалуйста, рассмотрите следующий трюк, чтобы получить правильный путь:

var assembly = typeof(RequiredServices_JamesTest).Assembly;
var assemblyPath = Path.GetDirectoryName(new Uri(assembly.EscapedCodeBase).LocalPath);

var filePath = Path.Combine(assemblyPath, "randomdictionary.txt");
// You have the correct file path now!
1 голос
/ 26 февраля 2012

Я пытаюсь сохранить свои тестовые файлы как встроенный ресурс в тестовом классе и извлечь их во временный каталог (с функциями автоочистки / удаления), чтобы мне никогда не приходилось беспокоиться о том, где находятся файлы. Кажется, так проще и стабильнее.

1 голос
/ 25 февраля 2012

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

[TestClass()]
[DeploymentItem("randomdictionary.txt")]
public class SomeTestClass
{
   //..
}
0 голосов
/ 08 июня 2016

Я решил использовать эту статью https://msdn.microsoft.com/en-us/library/ms182475.aspx

Один пример, чтобы упростить задачу

  1. внутри корневого каталога UnitTestProject1 У меня есть тестданные в каталоге TestData (на данном этапе разработки он содержит все каталоги и файлы, полезные для тестирования). Внутри TestData У меня есть каталог TestCollisioni

    Путь к направлению: UnitTestProject1 | -> TestData | -> TestCollisioni

  2. Моя команда onPostBuild (это описано по ссылке выше) для тестовых файлов xcopy: (вам нужно изменить только UnitTstProject1 и TestData значение, если необходимо (т.е. только если вы используете другое имя проекта теста или другое имя каталога TestData)).

    xcopy / Y / S "$ (SolutionDir) UnitTestProject1 \ TestData *" "$ (TargetDir) TestData \"

    Использование $ (SolutionDir) и $ (TargetDir) кажется лучшим способом автоматического развертывания тестового файла, не меняйте его

  3. В методе тестирования есть это значение для DeploymentItem

    [TestMethod]
    
    [DeploymentItem("TestData")]
    
  4. Внутри теста вы можете получить доступ к файлу внутри данных теста (и тому, что находится внутри этого каталога), например:

    Directory.Exists (@ " TestCollisioni \ "),

Итак, мой рабочий тестовый тест (НЕТ" \ "До TestCollisioni ):

    [TestMethod]
    [DeploymentItem("**TestData**")]
    public void TestMethod1()
    {
        Assert.IsTrue(Directory.Exists(@"TestCollisioni\"));
    }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...