如何测试一个类中的方法,使用Moq从另一个类调用方法?

时间:2017-06-13 19:01:39

标签: c# unit-testing moq

     public interface Interface1
     {
        void DoSomething1(int a);
     }

     public interface Interface2
     {
        void DoSomething2(int a);
     }

    public class Class1: Interface1
    {
        private Interface2 _interface2;

        public Class1(Interface2 _interface2)
        {
            this._inteface2= _interface2;
        }

        public void DoSomething1(int a)
        {
            _interface2.DoSomething2(a);
        }
    }

public class Class2: Interface2
    {
        public void DoSomething2(int a)
        {
            // some action
        }
    }

这是简化的代码。 我想知道如何测试Class1是否使用Moq从Class2调用DoSomething2(int a),在C#中的特定TestCases上?

2 个答案:

答案 0 :(得分:0)

当您向Interface2构造函数注入Class1时,您需要使用Moq来模拟它。然后,您需要执行DoSomething1并调用Verify方法以确保调用Interface2的方法一次。如果不是 - 测试将失败。示例如下:

[TestFixture]
public class Class1Tests
{
    [Test]
    public void DoSomething1_DoSomething2IsCalled()
    {
        //Setup
        //create a mock for Class1 dependency 
        var mock = new Mock<Interface2>();
        var sut = new Class1(mock.Object);

        //execute
        sut.DoSomething1(It.IsAny<int>());

        //test
        mock.Verify(m => m.DoSomething2(It.IsAny<int>()), Times.Once());
    }
}

答案 1 :(得分:0)

如果您要测试Class1,您应该模拟它的依赖项,在这种情况下,Interface2就像这样

Activity.From.Id