我在单元测试中设置了一个函数,并希望返回正在设置的相同函数的结果。
界面看起来像这样。
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;函数返回自己的结果。
答案 0 :(得分:1)
我希望我能正确理解你。
以下是您可以做的事情:
mock.Mock<ICommonServices>().Setup(x => x.AddOne(It.IsAny<int>())).Returns( (int a) =>
{
return a + 1;
});
如何重复使用AddOne()
方法:
AddOne()
声明为static
public class CommonServices : ICommonServices
{
public static int AddOne(int a)
{
return a + 1;
}
}
static
方法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);
});