我有一个公共方法,它使用本地私有方法从Db获取数据。
private string SomeMethod(string)
{
...
Doing some operations
...
string data = GetDBData(string);
Doing some operations
...
}
我想使用moles转移/隔离私有方法GetDBData(string),因此我的测试不需要DB。
显然,我的问题是:怎么做? 谢谢 乌里亚
EDIT
其他信息:
我试图将方法访问器更改为公共和内部受保护, 在这两种情况下,我现在可以将方法视为痣。 但是在运行测试时,原始方法仍在使用,而不是我在PexMethod中实现的绕道。
答案 0 :(得分:2)
您可以尝试以下任何一项。
制作方法 internal 并将类似属性添加到程序集中:
[assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]
将方法访问权限更改为 protected virtual ,然后使用存根。
答案 1 :(得分:1)
我想通了
如果我有公开的MyClass与私人SomeMethod
public class MyClass
{
private string SomeMethod(string str){}
}
如果你想破坏SomeMethod方法,你需要在测试方法中使用AllInstances:
[PexMethod]
SomeMethod(string str)
{
MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}