【问题标题】:Mock Dll in XunitXunit 中的模拟 Dll
【发布时间】:2020-07-29 17:48:53
【问题描述】:

我想在 xunit 中模拟一个 dll。任何人都可以帮助我解决问题。下面是我需要模拟 dll 的方法:

 [DllImport("arc-libs.dll", EntryPoint = "AdjustTimeZone")]
 public static extern string AdjustTimeZone(string jsonPayload);

【问题讨论】:

  • 你肯定是说你想模拟一个static extern 方法。没有模拟 dll 这样的事情。您指的是哪个模拟框架?
  • 您可以使用 TypeMock Isolator 或 JustMock(均已付费)或使用 MS Fakes(仅在 VS Enterprise 中可用)来伪造静态方法。

标签: c# xunit


【解决方案1】:

我不知道您指的是哪个模拟框架,但我知道的那些不能模拟静态成员,因为模拟是某种覆盖。因此,您需要一个接口来模拟,或者至少需要virtual

所以当你有这门课时

class MyClass
{
    public virtual void DoSomething() { ... }
}

模拟框架将生成一些派生自 MyClass 的类:

class MyMock : MyClass
{
    public override void DoSomething() { /* something different /* }
}

您可以围绕您的静态方法创建一个包装器并模拟它:

class MyClass
{
    [DllImport("arc-libs.dll", EntryPoint = "AdjustTimeZone")]
    public static extern string AdjustTimeZone(string jsonPayload);

    public virtual string AdjustTimeZoneWrapper(string jsonPayload) 
    => AdjustTimeZone(jsonPayload);
}

然而,这假设您的类的客户端也使用包装器方法,而不是 extern 之一。

【讨论】:

  • 但是对于 DllImport 我们总是必须使用静态或外部......它不支持虚拟
  • @shrutipatil Huum?当然 dllimport 只适用于extern。我从来没有说过任何不同的东西。但是你不应该在你的代码中使用那个方法,只能使用 virtual 包装器。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2022-01-13
  • 2019-04-12
  • 2021-01-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-08-22
相关资源
最近更新 更多