【发布时间】:2011-08-17 15:08:31
【问题描述】:
我想在我的单元测试中替换 Environment.GetFolderPath 的行为,但是在为 System 程序集生成痣之后,System.Moles 程序集不包含 MEnvironment 类型的定义。
【问题讨论】:
标签: moles pex-and-moles
我想在我的单元测试中替换 Environment.GetFolderPath 的行为,但是在为 System 程序集生成痣之后,System.Moles 程序集不包含 MEnvironment 类型的定义。
【问题讨论】:
标签: moles pex-and-moles
您是否尝试过在接口类型中存根? 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():
}
为了测试,创建一个 mock 类型,或 moole MyEnvironment.GetGolderPath。出于性能原因,创建模拟比创建模拟类型更可取。模拟只是返回一个值而不是调用基方法,就像摩尔类型一样。无论哪种方式,他的存根都是必要的,因此您不妨制作模拟,因为它可以重复用于其他测试。
【讨论】: