验证最小起订量单元测试方法 return 值
validate MOQ unit test method return value
我有以下 class 和测试 class 使用最小起订量编写:
public class Mytest : testin
{
public int getId(int id)
{
int s = 2;
return s;
}
}
测试class:
private Mock<testin> _mock;
[TestInitialize]
public void Setup()
{
_mock = new Mock<testin>();
}
[TestMethod]
public void returngetId()
{
// Build up our mock object
_mock.Setup(x => x.getId(It.IsAny<int>())).Returns(1)
}
我正在 returning 2 从函数和单元测试用例中检查值 1。根据我的理解,测试用例应该失败。但我收到成功消息。我如何验证 return 值正是我所期望的?如果 return 不是 1.
,我想通过测试
您当前的设置将跳过该方法的执行,而是 "blindly" return 1. 如果您希望执行该方法,则不应模拟该方法。如果删除设置行,您的测试用例确实会失败。通常,只有在不需要执行某个方法时才应模拟该方法。
澄清一下:
行 _mock.Setup(x => x.getId(It.IsAny<int>())).Returns(1)
配置您的模拟对象,以便无论何时调用 getId
方法,而不是执行它,值 1
将始终被 returned .因此,以下测试将通过:
[TestMethod]
public void returngetId_Always1()
{
// ... Build up our mock object
_mock.Setup(x => x.getId(It.IsAny<int>())).Returns(1);
Assert.AreEqual(1, _mock.Object.getId("foo"));
Assert.AreEqual(1, _mock.Object.getId("bar"));
}
为了从 mock 中获取要调用的方法的实际实现,您必须 mock class,而不是接口,具有以下配置:
[TestMethod]
public void returngetId_CallBase()
{
var mock = new Mock<MyTest>() { CallBase = true };
// add other method setups here. DO NOT setup the getId() method.
Assert.AreEqual(2, _mock.Object.getId("foo"));
Assert.AreEqual(2, _mock.Object.getId("bar"));
}
对于尚未提供模拟设置的任何方法,这将允许模拟推迟到基本实现。
我有以下 class 和测试 class 使用最小起订量编写:
public class Mytest : testin
{
public int getId(int id)
{
int s = 2;
return s;
}
}
测试class:
private Mock<testin> _mock;
[TestInitialize]
public void Setup()
{
_mock = new Mock<testin>();
}
[TestMethod]
public void returngetId()
{
// Build up our mock object
_mock.Setup(x => x.getId(It.IsAny<int>())).Returns(1)
}
我正在 returning 2 从函数和单元测试用例中检查值 1。根据我的理解,测试用例应该失败。但我收到成功消息。我如何验证 return 值正是我所期望的?如果 return 不是 1.
,我想通过测试您当前的设置将跳过该方法的执行,而是 "blindly" return 1. 如果您希望执行该方法,则不应模拟该方法。如果删除设置行,您的测试用例确实会失败。通常,只有在不需要执行某个方法时才应模拟该方法。
澄清一下:
行 _mock.Setup(x => x.getId(It.IsAny<int>())).Returns(1)
配置您的模拟对象,以便无论何时调用 getId
方法,而不是执行它,值 1
将始终被 returned .因此,以下测试将通过:
[TestMethod]
public void returngetId_Always1()
{
// ... Build up our mock object
_mock.Setup(x => x.getId(It.IsAny<int>())).Returns(1);
Assert.AreEqual(1, _mock.Object.getId("foo"));
Assert.AreEqual(1, _mock.Object.getId("bar"));
}
为了从 mock 中获取要调用的方法的实际实现,您必须 mock class,而不是接口,具有以下配置:
[TestMethod]
public void returngetId_CallBase()
{
var mock = new Mock<MyTest>() { CallBase = true };
// add other method setups here. DO NOT setup the getId() method.
Assert.AreEqual(2, _mock.Object.getId("foo"));
Assert.AreEqual(2, _mock.Object.getId("bar"));
}
对于尚未提供模拟设置的任何方法,这将允许模拟推迟到基本实现。