【问题标题】:FileNotFoundException when creating a proxy object using Moq and Castle使用 Moq 和 Castle 创建代理对象时出现 FileNotFoundException
【发布时间】:2017-01-30 04:07:15
【问题描述】:

我有一个存在于 nuget 包中的基本抽象类,我正在为其实现一个具体类,如下所示:

public class MyConcreteClass : MyBaseAbstractClass<SomeType> {

  public MyConcreteClass(IAnInterfaceOne interfaceOne, IAnInterfaceTwo interfaceTwo) : base(interfaceOne, interfaceTwo) { }

}

我像这样嘲笑这两个参数:

var mockFirst = new Mock<IAnInterfaceOne>();
var mockSecond = new Mock<IAnInterfaceTwo>();

具体类如下:

var mockConcrete = new Mock<MyConcreteClass>(mockFirst.Object, mockSecond.Object);

当我尝试访问mockConcrete 中的Object 属性时

var concreteObjectInstance = mockConcrete.Object

我得到一个FileNotFoundExceptionCould not load file or assembly 'Serilog.dll',VS 中的调试器指向异常来自何处的基本构造函数调用:

base(interfaceOne, interfaceTwo)

Castle.CoreMoq 版本:

<package id="Castle.Core" version="3.3.3" targetFramework="net452" />
<package id="Moq" version="4.5.21" targetFramework="net452" />

我已经搜索了基类所在的nuget包,并且没有serilog的引用或用法。我searched Castle.Core's repo and found many usages of serilog 我相信这是一个日志库。所以我对这个异常是如何发生的以及如何尝试解决它有点困惑,所以当我模拟我的对象时它不会抛出异常。

【问题讨论】:

  • 您的具体类是被测系统还是您将其用作实际被测系统的依赖项?
  • 具体类是我想模拟返回值的依赖项。我实际测试的内容使用它,但它只是一个依赖项。
  • 如果您手动新建具体类并通过两个模拟,它是否也会失败。由于它已经是具体的,我看不出你想模拟什么,因为它已经在使用它的依赖项的模拟 var mockConcrete = new MyConcreteClass(mockFirst.Object, mockSecond.Object);
  • 所以我不想手动创建具体并传入两个模拟的原因是因为它有一个命中服务的方法。我想模拟该方法的返回值,这样它就不会出现并命中服务。
  • 那么你的问题是设计。该服务是一个依赖项,然后也应该被抽象,以便您可以模拟它。就目前而言,您的具体类与该服务紧密耦合。应该注入该服务器。

标签: c# moq castle-dynamicproxy


【解决方案1】:

经过深入研究,我找到了问题的原因。它实际上与城堡或起订量无关。它实际上是由 Metrics.NET 引起的,这是一个在 MyBaseAbstractClass&lt;T&gt; 中引用的 nuget 包。这一行在基类中:

private readonly Metrics.Timer _callTimer = Metric.Timer("", Unit.Calls, SamplingType.LongTerm, TimeUnit.Milliseconds);

并且每次在该行初始化基类时都会引发异常。我looked at the packages Metrics.NET was referencing 看到了LibLog。所以我查看了LibLog,发现它是referencing Serilog。所以我不确定为什么在这些包中仍然找不到Serilog,但是我删除了抛出异常的行,因为它无论如何都没有使用,并且还删除了Metrics.NET 包。我正在回答我的问题,以确保人们知道这不是我最初认为的 Castle 或 Moq 的问题。

【讨论】:

    猜你喜欢
    • 2021-02-10
    • 2013-05-17
    • 2012-03-01
    • 1970-01-01
    • 2011-07-19
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多