如何模拟在多个 类 中定义的具有相同名称的方法

How to mock a method that is defined in multiple classes with same name

我有一个工厂方法

public abstract class PFact 
{
   public abstract ResponseMessage P(Model request);
}

我有不同的 classes 覆盖此方法。

public class one : PFact 
{
    public override ResponseMessage P(Model request)
    {
        return response
    }
}

public class Two : PFact 
{
    public override ResponseMessage P(Model request)
    {
        return response
    }
}

在另一个 class 中,我使用

调用这些方法
 var result = _F["One"].P(model);
 var result2 = _F["Two"].P(model);

我试图模拟结果和结果 2,但无法完成。 我正在尝试

var mock = new Mock<PFact>()
mock.Setup(x => x.P(model)).Returns(response);

这不是在嘲笑那些 class 第一和第二。

我如何明确提及两个 classes 以分别模拟以编写测试用例。 我需要模拟 result 和 result2。请给我建议!

Moq 库(我假设您正在使用)只能在具体 classes 上提供虚拟方法的模拟实现。

如果您将 PFact 中的抽象方法更改为虚拟方法:

public virtual ResponseMessage P(Model request) {}

然后您可以为每个 class 创建一个模拟并提供不同的实现。