我如何在使用Castle的测试项目(TFS 2008)中进行依赖注入
时间:2020-03-06 14:25:40 来源:igfitidea点击:
我在测试项目中使用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>
当我排队一个新版本时,它会产生
以下消息:
Unable to create instance of class Example2008.Test.ActiveProductRepositoryTest. Error: System.Configuration.ConfigurationException: The type name Example2008.Repository.LALALALALA, Example2008.Repository could not be located. Castle.Windsor.Installer.DefaultComponentInstaller.ObtainType(String typeName) Castle.Windsor.Installer.DefaultComponentInstaller.SetUpComponents(IConfiguration[] configurations, IWindsorContainer container) Castle.Windsor.Installer.DefaultComponentInstaller.SetUp(IWindsorContainer container, IConfigurationStore store) Castle.Windsor.WindsorContainer.RunInstaller() Castle.Windsor.WindsorContainer..ctor(IConfigurationInterpreter interpreter) Example2008.Test.ActiveProductRepositoryTest..cctor() in d:\Code_Temp\Example Project Nightly\Sources\Example2008.Test\ProductRepositoryTest.cs: line 19
从此消息看来,我的配置似乎是正确的(可以看到我想实例化具体的类" LALALALALA",因此xml配置显然已正确地变为红色)
我认为我的依赖项也已正确设置(因为即使在清理解决方案并重新构建后,它也可以在本地运行)。
有什么想法吗?
(顺便说一下,使用VS2008,TFS 2008.Net 3.5,Castle 1.03)
解决方案
听起来好像bin目录(或者我们执行目录所在的目录)缺少用于保存存储库实现的程序集。
我首先要检查该程序集是否存在于构建服务器的执行目录中。
如果确实存在,那么我将检查以确保程序集的版本正确,即在相同的名称空间中具有存储库实现等。
可能是构建服务器正在执行/构建对象,而不是VS正在执行/构建的地方。
这太有趣了。我发现此博客文章可能会对问题有所帮助。
看起来MSTest正在使用该目录作为它的工作目录,至少可以这样说。博客文章显示了如何更改目录,以便获得一致的结果。我还将做一些谷歌搜索,以找出是否存在更优雅的解决方案。