0

我正在使用Moqv4.13 和C#. 我正在尝试MethodAMyClass : IMyInterface. MethodA调用了另一个接口 ( IAnother) 的方法,我已经设置了这些方法。这些似乎设置得很好。

MethodA也调用MethodB(also on IMyInterface) 和MethodC(public, but not on IMyInterface) in MyClass

我已经设置,MethodB但在测试时,似乎MethodB调用了实际的代码。

至于MethodC,我不知道如何设置。

public interface MyInterface 
{
    int MethodA();
    int MethodB();
}
public class MyClass : MyInterface 
{
    public MyClass(IAnother b) {...}
    
    public int MethodB(){...}
    public int MethodC(){...}

    public int MethodA()
    {
        ...
        var x = b.MethodX();
        ...
        var a = MethodB();
        ...
        var b = MethodC()

        return a + b + x;
    }
}
public MyInterfaceHarness
{
   Mock<IAnother> _anotherMock;

   public MyInterfaceHarness() 
   {
       _anotherMock = new Mock<IAnother>();
       Mocker = new AutoMocker();
   }

   public AutoMocker Mocker {get;}
   
   public MyClass MethodAHarness()
   {
       Mocker.Use(_anotherMock)  // Mocker is Automocker
       _anotherMock.Setup(m => m.MethodX()).Returns(5); // this seems to be setup fine

      //here I want to setup invocations to MethodB and MethodC
      ....

      Mocker.CreateInstance<MyClass>();
   }
}
[TestFixture]
public MyInterfaceTest 
{
    private  MyInterfaceHarness _harness;
    private AutoMocker _mocker;

    [SetUp]
    public void SetUp()
    {
       _harness = new MyInterfaceHarness();
       _mocker = _harness.Mocker();
    }

    [Test]
    public void Should_Test_MethodA()
    {
        var mi = _harness.MethodAHarness();

        // use _mocker to setup other invocations that need verify            
        ...

        var i = mi.MethodA();
       
       //asserts
       ...
        
    }
}
4

0 回答 0