【发布时间】:2016-09-08 17:39:14
【问题描述】:
我正在单元测试中设置一个函数,并希望返回正在设置的相同函数的结果。
界面是这样的。
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);
}
}
我正在尝试设置“AddOne”函数来返回它自己的结果。
【问题讨论】:
-
为什么要模拟只有
a + 1的东西?根本没有必要模拟它。 -
这只是一个例子。在实际代码中发生了更多事情。
-
那么您可能必须简化测试,以便测试一些更具体的情况并准确返回与该特定测试用例对应的函数 AddOne 的值?
-
测试的条件是什么?你能用这个命名模式吗? UnitOfWork_StateUnderTest_ExpectedBehavior.
-
你的 sut 不应该被嘲笑。你嘲笑 sut 的依赖关系
标签: c# unit-testing nunit moq autofac