Я заметил, что существует разница между путем, возвращаемым
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)
возвращает один и тот же путь, даже если тесты расположены в разных сборках, когда запускаются с опцией Выполнить все ?