设置功能返回正在设置的相同功能的结果

时间:2016-09-08 17:39:15

标签: c# unit-testing nunit moq autofac

我在单元测试中设置了一个函数,并希望返回正在设置的相同函数的结果。

界面看起来像这样。

 public interface ICommonServices
{
    int[] GetIntArray();
    int AddOne(int a);
}

接口就像这样实现。

  public int AddOne(int a)
    {
        return a + 1;
    }
    public int[] GetIntArray()
    {
        int[] x = { 1, 2, 3, 4 };
        return x;
    }

测试中的服务(ObservationService)具有需要测试的功能。

public string SomeCalculation()
    {
        var intArray = _commonServices.GetIntArray();
        List<int> result = intArray.Select(x => _commonServices.AddOne(x)).ToList();
        //Do Something With result.
        return "Done";
    }

_commonServices使用DI注入。

和我的单元测试看起来像这样

   [Test]
    public void Some_Test()
    {
        int[] a = { 5, 6, 7, 8 };
        using (var mock = AutoMock.GetLoose())
        {
            // Arrange          
            mock.Mock<ICommonServices>().Setup(x => x.GetIntArray()).Returns(a);
            mock.Mock<ICommonServices>().Setup(x => x.AddOne(It.IsAny<int>())).Returns(/* what to do here AddOne(x)   */);
            var sut = mock.Create<ObservationService>();
            // Act
            var res = sut.SomeCalculation();
            // Assert
            Assert.AreEqual("Done", res);
        }
    }

我正在尝试设置&#34; AddOne&#34;函数返回自己的结果。

2 个答案:

答案 0 :(得分:1)

我希望我能正确理解你。

以下是您可以做的事情:

mock.Mock<ICommonServices>().Setup(x => x.AddOne(It.IsAny<int>())).Returns( (int a) =>
                                                                        {
                                                                            return a + 1;
                                                                        });

如何重复使用AddOne()方法:

  1. 将您的AddOne()声明为static
  2. public class CommonServices : ICommonServices
    {
        public static int AddOne(int a)
        {
            return a + 1;
        }
    }
    
    1. 现在,您可以在模型中使用static方法
    2. mock.Mock<ICommonServices>().Setup(x => x.AddOne(It.IsAny<int>())).Returns( (int a) =>
                                                                                  {
                                                                                      return CommonServices.AddOne(a);
                                                                                  });
      

答案 1 :(得分:0)

解决方案是moq the CommonService

   var cs = mock.Create<CommonServices>();

并将其用作回报

mock.Mock<ICommonServices>().Setup(x => x.AddOne(It.IsAny<int>())).Returns( (int a) =>
                                                                        {
                                                                            return cs.AddOne(a);
                                                                        });