我想在我的unittest中替换Environment.GetFolderPath
的行为,但在System
程序集的生成摩尔数之后,System.Moles
程序集不包含MEnvironment
类型的定义。
答案 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类型一样。无论哪种方式,他都是必要的,所以你也可以制作模拟,因为它可以重复用于其他测试。