摩尔宿主无法解析依赖程序集

  • 本文关键字:依赖 程序集 宿主 moles
  • 更新时间 :
  • 英文 :


我正在开发一种测试方法,其中同时使用RhinoMocks和Moles。我已根据需要将测试方法的主机类型声明为 Moles。现在,当涉及到 RhinoMocks 必须发出运行时程序集才能为接口创建模拟时,抛出了一个 FileNotFoundException,指向我的一个私有 DLL,它实际上与测试 DLL 和包含待测试类的 DLL 位于同一文件夹中。

但是当我删除 HostType 属性时,模拟实例的创建工作正常,没有任何例外。

因此,我构建了一个解决方法,以使其与 Moles 主机类型一起使用,使用以下步骤:

1( 我在我的 [TestInitialize] 中注册了 AppDomain.CurrentDomain.AssemblyResolve 事件

2(在事件处理程序中,我打包了以下逻辑:

System.Reflection.Assembly CurrentDomain_AssemblyResolve(object sender, ResolveEventArgs args)
    {
        string asmPath = Environment.CurrentDirectory + "\" + args.Name.Split(',')[0] + ".dll";
        if(System.IO.File.Exists(asmPath))
            return System.Reflection.Assembly.Load(new System.Reflection.AssemblyName(args.Name));
        return null;
    }

现在,正如预期的那样,当在 Moles HostType 下执行测试时,确实会调用此程序集解析程序。测试现在运行。

但问题仍然是:

1( 为什么我仍然需要一个单独的程序集解析程序,即使我们使用

AppDomain.CurrentDomain.SetData("APPBASE", Environment.CurrentDirectory);

我检查了当前目录确实是我的 bin 文件夹,可以在其中找到每个二进制文件,包括测试 DLL。

2(为什么我在测试涉及相同依赖项的其他生产DLL时没有遇到此错误。

3(使用NMock2时也会出现此问题,我只是想看看这是否是RhinoMocks特定的问题。但事实证明,即使是 NMocks2 在 Reflection.Emit 步骤中也有同样的问题,使用与 RhinoMocks 相同的依赖 DLL。有什么方法可以解释这一点吗?

您缺少的部分是,当您运行单元测试时,正在运行的应用程序是单元测试托管应用程序。该应用程序的当前目录可能是安装其运行器的目录。程序集与参数一起传递到应用程序。

假设 CurrentDirectory 是应用程序的目录是错误的,这解释了第 1、2 和 3 点。

最新更新