Код моей DLL находит нужный XML следующим образом:
String asmLocation = Path.GetDirectoryName(Assembly.GetExecutingAssembly(
).Location);
// xml file with AutoCAD products data.
String xmlFile = Path.Combine(asmLocation, "cad.data.xml");
if (!File.Exists(xmlFile)) {
throw new FileNotFoundException(xmlFile);
}
Результаты компиляции размещены в каталоге «C:\Users\developer\Documents\Visual Studio 2013\Projects\cad-solution\cad.UnitTests\bin\Debug«. Запустив тесты на исполнение я увидел, что все они с треском провалились:
В правом верхнем текстбоксе читаю сгенерированное моим кодом сообщение об ошибке:
Bushman.CAD.UnitTests.Tests.LocalizedProduct_TryParse_Check_BoolValue(null,False):
System.TypeInitializationException : Инициализатор типа «Bushman.CAD.LocalizedProduct» выдал исключение.
—-> System.IO.FileNotFoundException : C:\Users\developer\AppData\Local\Temp\nunit20\ShadowCopyCache\5128_635702471073123992\Tests_27930185\assembly\dl3\7e84bc6f\b85de2a2_d6a9d001\cad.data.xml
Я подсветил красным цветом ключевую информацию. Это исключение происходит потому, что NUnit копирует тестируемую DLL в произвольно сгенерированный каталог и уже оттуда загружает её и запускает присутствующие в ней тесты. Но скопировав DLL, NUnit не сделал того же самого и для моего XML файла, в виду чего и происходит обозначенное исключение. Обозначенное поведение в NUnit называется Shadow Copy (Теневое Копирование).
Shadow Copy можно включать или отключать в настройках NUnit: меню Tools -> Settings… -> Test Loader -> Advanced -> Shadow Copy -> Enable Shadow Copy:
Обратите внимание на информацию, которую я выделил красным цветом.
Если обозначенную галочку снять, то после перезапуска NUnit теневое копирование не происходит и DLL загружается из того каталога, где она изначально находилась. Соответственно успешно находится и XML файл: