1

我想替换我的单元测试中的行为,但是在为程序集Environment.GetFolderPath生成痣之后,程序集不包含 type 的定义。SystemSystem.MolesMEnvironment

4

1 回答 1

0

您是否尝试过在接口类型中存根?sub 可以通过构造函数注入或方法输入参数传入。例如,创建接口IEnvironment,包括GetFolderPath 方法。如果您已经知道如何执行此操作,请随时继续。否则,下面将演示如何在 Environment 类中存根。(我正在手机上输入这个,所以请耐心等待;)

public interface IEnvironment
{
  string GetFolderPath(Environment.SpecialFolder folder);
}

接下来,创建一个存根:

public class MyEnvironment : Environment, IEnvironment
{ 
  public string GetFolderPath(Environment.SpecialFolder folder)
  {
    return base.GetFolderPath(folder);
  }
}

将存根作为参数传递给您的方法或类构造函数:

public void MyMethod(IEnvironment env)
{
  var path = env.GetFolderPath():
}

为了测试,创建一个模拟类型,或者mole MyEnvironment.GetGolderPath。出于性能原因,创建模拟比创建模拟类型更可取。模拟只是返回一个值而不是调用基方法,就像摩尔类型一样。无论哪种方式,他的存根都是必要的,因此您不妨制作模拟,因为它可以重用于其他测试。

于 2011-08-18T06:28:45.443 回答