Как сделать Dependency Injection в тестовом проекте (TFS 2008) с использованием Castle
Я использую Castle Windsor для внедрения зависимостей в моем тестовом проекте. Я пытаюсь создать экземпляр одного из моих классов "Репозиторий". "Он отлично работает на моей машине", но когда я запускаю ночную сборку в TFS, мои тесты не могут загрузить указанные классы.
private static readonly WindsorContainer _container = new WindsorContainer(new XmlInterpreter());
public void MyTestInitialize()
{
var testRepository = (IBogusRepository)_container[typeof(IBogusRepository)];
}
Конфигурация XML:
<castle>
<components>
<component id="primaryBogusRepository" type="Example2008.Repository.LALALALALA, Example2008.Repository" service="Example2008.Domain.Repository.IBogusRepository, Example2008.Domain" />
<component id="primaryProductRepository" type="Example2008.Repository.ProductRepository, Example2008.Repository" service="Example2008.Domain.Repository.IProductRepository, Example2008.Domain" />
</components>
</castle>
Когда я ставлю в очередь новую сборку, она выдает следующее сообщение:
Невозможно создать экземпляр класса Example2008.Test.ActiveProductRepositoryTest. Ошибка: System.Configuration.ConfigurationException: имя типа Example2008.Repository.LALALALALA, Example2008.Repository не удалось найти.
Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType (имя типа строки) Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(конфигурации IConfiguration[], контейнер IWindsorContainer).WindsorContainer.RunInstaller() Castle.Windsor.WindsorContainer..ctor(интерпретатор IConfigurationInterpreter) Example2008.Test.ActiveProductRepositoryTest..cctor() в d:\Code_Temp\Example Project Nightly\Sources\Example2008.Test\ProductRepositoryTest.cs: строка 19
Из этого сообщения кажется, что моя конфигурация верна (видно, что я хочу создать конкретный класс 'LALALALALA', поэтому конфигурация xml, очевидно, была правильно выделена красным цветом)
Я думаю, что мои зависимости также настроены правильно (потому что это работает локально, даже если я очищаю решение и перестраиваю).
Какие-нибудь мысли?
(используя VS2008, TFS 2008.Net 3.5, Castle 1.03, кстати)
2 ответа
Это интересно. Я нашел это сообщение в блоге, которое может помочь вашей проблеме. Похоже, MSTest использует его в качестве рабочего каталога, что раздражает, если не сказать больше. В сообщении блога показано, как изменить каталог, чтобы вы могли получать согласованные результаты. Я также хотел бы сделать поиск в Google, чтобы выяснить, существует ли более элегантное решение.
Похоже, что сборка, которая содержит реализации репозитория, отсутствует в каталоге bin (или там, где ваш исполняющий каталог для сборки).
Сначала я бы проверил, существует ли сборка в каталоге выполнения сервера сборки.
Если он существует, то я бы проверил, чтобы убедиться, что версия сборки правильная, то есть имеет реализацию репозитория в том же пространстве имен и т. Д.
Может случиться так, что ваш сервер сборки выполняет / строит объекты где-то еще, чем где исполняет / строит VS.