小编use*_*891的帖子

Moq - 在同一个类中调用两个函数,一个是真实的,一个是嘲弄的

我有一段代码,我可能无法改变.理想情况下,我会将Publish方法移动到另一个类中.嘲弄将成为一个微不足道的操作,我会很好.这是一个简化的例子.

public class Entity
{
  private IController _controller;

  // Omitted: Constructor where IController is assigned

  public virtual int Process()
  {
    return Publish(_controller.DoSomeStuff());
  }

  public virtual int Publish(int val)
  {
    Console.WriteLine(val);  // This is actually a call to an external system.
    return val;
  }
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是调用真正的Process方法和模拟的Publish方法._controller的值也将被模拟.

我尝试使用moq并做:

var mock = new Mock<IController>();
mock.Setup(m => m.DoSomeStuff()).Returns(11);

var mock2 = new Mock<Entity_Accessor>();
mock2.CallBase = true;
mock2.Setup(a => a.Publish(It.IsAny<int>())).Returns(999);
mock2.Object._controller = mock.Object;

int result = mock2.Object.Process();
Assert.AreEqual(999, result); …
Run Code Online (Sandbox Code Playgroud)

c# unit-testing moq

2
推荐指数
1
解决办法
4422
查看次数

标签 统计

c# ×1

moq ×1

unit-testing ×1