我如何在使用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正在使用该目录作为它的工作目录,至少可以这样说。博客文章显示了如何更改目录,以便获得一致的结果。我还将做一些谷歌搜索,以找出是否存在更优雅的解决方案。