2013-06-01 4 views
2

Я пытаюсь написать единичный тест, который обращается к ресурсу, который я связал с проектом. Вот общая структура. Ресурс имеет строки, предназначенные для использования MyLibClass и класс установлен в en-USКак получить доступ к встроенному ресурсу в DLL .Net из другой (тестовой) .Net dll?

Solution1 
--MyLibrary 
    --Properties 
    --AssemblyInfo.cs 
    --Resources.resx 
    --Resource.Designer.cs 
    --References 
    --MyLibClass.cs 

--MyLibrary.Tests 
    --Properties 
    --AssemblyInfo.cs 
    --References 
    --MyLibClassTests.cs 

--MainProject 

тест должен создать класс и передать ей ResourceManager, потому что я пытаюсь использовать Dependency Injection. Я получаю ошибку ниже, когда пытаюсь загрузить, используя код ниже в тесте.

Поскольку ресурс встроен в MyLibrary.dll, к которому относится приложение MyLibraryTest.dll?

resmgr = new ResourceManager("MyLibrary", 
         Assembly.GetExecutingAssembly()); 

Ошибка в NUnit

MyLibrary.Tests. MyLibClassTests.IsInValidMyProperty_Blank: 
An unexpected exception type was thrown 
Expected: System.ArgumentException 
but was: System.Resources.MissingManifestResourceException : Could not find any 
resources appropriate for the specified culture or the neutral culture. Make sure 
"MyLibrary.resources" was correctly embedded or linked into assembly "MyLibrary.Tests" 
at compile time, or that all the satellite assemblies required are loadable and 
fully signed. 

Так, подумав об этом, DLL файлы находятся в отдельных папках проекта.

Есть ли лучший способ приблизиться к этому?

+0

executingassembly Ваш длл тест, вы хотите сборку, вы проверяете –

ответ

2

В своем примере вы уже проходили сборку для загрузки ресурсов - вы просто по какой-то причине используете сборку, которая не содержит ресурс, который вы ищете. Скорее всего, вам нужно пройти ту же сборку, где MyLibClass есть, а не Assembly.GetExecutingAssembly(), которую я предполагаю, дает вам сборку тестового кода.

resmgr = new ResourceManager("MyLibrary", 
    typeof(MyLibClass).Assembly); 
+0

Имеет смысл, но он говорит мне, что «MyLibClass» это пространство имен, но используется как «типа». –

+0

@RichShealer - это ваш код. Я не знаю, какие классы находятся в этой сборке, где есть ресурсы. Часто имя класса совпадает с именем файла, поэтому я предположил, что «MyLibClass» - это имя класса, но, похоже, это пространство имен в вашем коде. Просто найдите класс в этой сборке и используйте его. Обратите внимание: если вы называете класс и пространство имен одинаковыми, вы будете получать некоторые запутывающие проблемы из-за разрешения имен время от времени. –

+0

Это помогло. Мне никогда не приходило в голову, что мне нужен класс. Я думал, что мне нужно что-то выше, чтобы идентифицировать модуль. –

Смежные вопросы