【问题标题】:Castle Windsor - FileNotFoundException in Unit TestsCastle Windsor - 单元测试中的 FileNotFoundException
【发布时间】:2020-11-10 10:26:41
【问题描述】:

我继承了一个由 VB.Net 项目组成的 ASP.Net Web 应用程序。我在解决方案中添加了一个 C# 项目,它引用了几个 VB.Net 项目。

该应用程序使用 Castle Windsor 作为 DI 容器,并且在其中一个 VB.Net 项目中注册了依赖项。

在那个 VB.Net 项目中。为了避免循环引用,我使用“FromAssemblyNamed”方法来注册我的 C# 项目中定义的依赖项:

container.Register(Classes.FromAssemblyNamed("x.y.z.TLBusinessLayerV2").BasedOn(Of IService).WithService.FromInterface().Configure(Function(c) c.LifeStyle.Transient))

当我运行应用程序时,这一切正常。

但是,有一个现有的单元测试项目。其中我添加了对我的 C# 程序集的引用。 当我运行所有测试时,一些测试在遇到上面的代码时会失败,并出现以下异常:

System.IO.FileNotFoundException:无法加载文件或程序集 x.y.z.TLBusinessLayerV2' 或其依赖项之一。系统找不到指定的文件。

  • C# 程序集引用的所有程序集也被单元测试项目引用。
  • VB.Net 项目、C# 项目和单元测试项目的 Target CPU 均设置为 x86。

如果我随后单独运行其中一项失败的测试,则测试通过。

问。当我全部运行测试时,为什么测试都失败了? 非常感谢任何帮助。

【问题讨论】:

    标签: c# vb.net unit-testing castle-windsor


    【解决方案1】:

    此问题的解决方案是向单元测试项目添加一个虚拟类,该类引用程序集中的一个类(在“Classes.FromAssemblyNamed”中加载)。比如:

    Public Class DummyDependencies
            Private Xyz As Object = GetType(<name of a class in target assembly>)
    End Class
    

    这似乎强制对程序集的引用。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-08-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多