我有一种使用本地私人方法从数据库获取数据的公共方法。

private string SomeMethod(string) { ... Doing some operations ... string data = GetDBData(string); Doing some operations ... }

我想使用摩尔数转移/隔离私有方法getDbData(String),因此我的测试不需要DB。

显然,我的问题是:如何做?谢谢乌里亚

编辑
附加信息:

我试图将方法访问器更改为公共和内部保护,在这两种情况下,我现在都可以将这些方法视为摩尔。但是,在运行测试时,仍在使用原始方法,而不是我在PexMethod中实现的弯路。

有帮助吗?

解决方案 2

我想到了

如果我有私人的私人物种

public class MyClass
{
    private string SomeMethod(string str){}
}

如果要摩尔的物种方法方法,则需要在测试方法中使用allinstances:

[PexMethod]
SomeMethod(string str)
{
    MMyClass.AllInstances.SomeMethod = (instance, str) => { return "A return string"; };
}
  • 请注意,lambda接收实例参数作为第一个参数。我不确定它的功能是什么。

其他提示

您可以尝试以下任何一个。

  • 制作方法 内部的 并将类似的属性添加到组件中:

    [assembly: InternalsVisibleTo("<corresponding-moles-assembly-name>")]

  • 更改方法访问 受保护的虚拟 然后使用存根。

  • 对您的类重构,以便将接口(idataAccessObject)作为构造函数参数,对该接口的方法之一,然后在测试方法中将该接口的存根传递给您的类。
许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top