无法为System.Environment类创建Mole

时间:2011-08-17 15:08:31

标签: moles pex-and-moles

我想在我的unittest中替换Environment.GetFolderPath的行为,但在System程序集的生成摩尔数之后,System.Moles程序集不包含MEnvironment类型的定义。

1 个答案:

答案 0 :(得分: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():
}

要进行测试,请创建一个模拟类型,或者创建一个MyEnvironment.GetGolderPath。出于性能原因,创建模拟比moled类型更可取。 mock只是返回一个值而不是调用基本方法,就像moled类型一样。无论哪种方式,他都是必要的,所以你也可以制作模拟,因为它可以重复用于其他测试。