Выполняются ли MSTests как одна сборка, даже если они расположены в разных сборках? - PullRequest
0 голосов
/ 22 февраля 2019

Я заметил, что существует разница между путем, возвращаемым

Directory.GetCurrentDirectory();

, и путем, возвращаемым

Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location)

при выполнении нескольких тестов ms за сборку и при запуске их всех вместе.


В текущем примере у меня есть общий проект, на который ссылаются два проекта модульных тестов Test1 и Test2 .В общем проекте у меня есть следующий класс:

public static class PathProvider
{
    private static string GetWritingPathForTest(string testName) =>
        "C:/file - " + testName + ".txt";

    public static string Path1 => Directory.GetCurrentDirectory();
    public static string Path2 =>
        Path.GetDirectoryName(Assembly.GetExecutingAssembly().Location);
    public static string Path3 => AppDomain.CurrentDomain.BaseDirectory;


    public static void WritePaths(string testName)
    {
        var writingPath = GetWritingPathForTest(testName);
        File.WriteAllText(writingPath, Path1 + Environment.NewLine);
        File.AppendAllText(writingPath, Path2 + Environment.NewLine);
        File.AppendAllText(writingPath, Path3 + Environment.NewLine);
    }
}

В тестовых методах я просто вызываю метод WritePaths, чтобы посмотреть, что он пишет.При выполнении первого теста, а затем второго, результаты выглядят следующим образом:

Test1:

... \ Test1 \ bin \ Debug

... \ Test1 \ bin \ Debug

... \ Test1 \ bin \ Debug

Test2:

... \ Test2 \ bin \ Debug

... \ Test2 \ bin \ Debug

... \ Test2 \ bin \ Debug

Где ... Я заменил весь путь, который является таким же и неважным в этом контексте.

Таким образом, каждый тест был выполнен в пределах своей сборки, ничего удивительного к настоящему времени, по крайней мере, дляme.

Вот странная часть: если я запускаю эти тесты с помощью кнопки Run All , результаты будут такими:

Test1:

... \ Test1 \ bin \ Debug

... \ Test1 \ bin \ Debug

... \ Test1 \ bin \ Debug

Test2:

... \ Test2 \ bin \ Debug

... \ Test1 \ bin \ Debug

... \ Test2 \ bin \ Debug

Обратите внимание, что вторая запись одинакова для них обоих.У меня вопрос - почему Path.GetDirectoryName(Assembly.GetExecutingAssembly().FullName) возвращает один и тот же путь, даже если тесты расположены в разных сборках, когда запускаются с опцией Выполнить все ?

...