Я использую вспомогательный класс для получения базовых путей, к которым я, возможно, захочу получить доступ в своих модульных тестах.
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Brass9.Testing
{
public static class TestHelper
{
public static string GetBinPath()
{
return System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetExecutingAssembly().Location);
}
public static string GetProjectPath()
{
string appRoot = GetBinPath();
var dir = new DirectoryInfo(appRoot).Parent.Parent.Parent;
var name = dir.Name;
return dir.FullName + @"\" + name + @"\";
}
public static string GetTestProjectPath()
{
string appRoot = GetBinPath();
var dir = new DirectoryInfo(appRoot).Parent.Parent;
return dir.FullName + @"\";
}
public static string GetMainProjectPath()
{
string testProjectPath = GetTestProjectPath();
// Just hope it ends in the standard .Tests, lop it off, done.
string path = testProjectPath.Substring(0, testProjectPath.Length - 7) + @"\";
return path;
}
}
}
Иногда мои взаимодействия с путями более сложны; Я часто использую центральный класс, который я называю «Приложение», чтобы указать некоторые основные сведения о приложении, такие как его корневая папка, его корневое пространство имен и модуль и т. Д. Классы иногда зависят от существования приложения, поэтому вместо этого я помещу инициализацию метод в приложении, использующий код, подобный приведенному выше, для инициализации себя для использования тестов и вызова этого метода из команды Init в модульном тесте.
(обновлено)
Старый ответ
Я обнаружил, что это помогает получить произвольные пути для доступа к файлам в папке проекта, которую вы собираетесь тестировать (в отличие от файлов в папке проекта теста, которые могут привести к занятости, если вам нужно скопировать объекты).
DirectoryInfo projectDir = new DirectoryInfo(@"..\..\..\ProjectName");
string projectDirPath = projectDir.FullName;
Затем вы можете использовать любую из этих переменных для доступа ко всему, что вам нужно из соответствующего проекта. Очевидно, замените «ProjectName» на фактическое имя вашего проекта.