我在单元测试中遇到了模拟问题,所以我做了一个简单的例子来说明我的问题。我有以下...
public class SomeClass : ISomeInterface
{
public int ID { get; set; }
public string Desc { get; set; }
public int Create(SomeClass t)
{
return 5;
}
public int Create2(string s)
{
return 7;
}
}
public interface ISomeInterface
{
int Create(SomeClass t);
int Create2(string s);
}
现在我有两种方法来测试模拟接口(interface)
private void TestCreate()
{
var mocker = new Mock<ISomeInterface>();
mocker.Setup(x => x.Create(new SomeClass())).Returns(3);
var result = mocker.Object.Create(new SomeClass());
}
private void TestCreate2()
{
var mocker = new Mock<ISomeInterface>();
mocker.Setup(x => x.Create2("Test")).Returns(4);
var result = mocker.Object.Create2("Test");
}
TestCreate2 工作并返回模拟结果“4”
然而 TestCreate 返回“0”而不是“3”
我需要什么才能模拟接受自定义类作为参数而不是简单的整数和字符串的方法?
最佳答案
是的,这是因为您已将 TestCreate 设置为在获取您在安装调用期间传入的 SomeClass 实例时返回 3。但是,由于您内联新建了实例,因此在实际 Create 调用期间传入的实例并不相同。以下任一选项都可以解决您的问题...
private void TestCreate()
{
var mocker = new Mock<ISomeInterface>();
mocker.Setup(x => x.Create(It.IsAny<SomeClass>())).Returns(3);
var result = mocker.Object.Create(new SomeClass());
}
private void TestCreate()
{
var mocker = new Mock<ISomeInterface>();
var someClass = new SomeClass();
mocker.Setup(x => x.Create(someClass)).Returns(3);
var result = mocker.Object.Create(someClass);
}
关于c# - 使用起订量需要帮助,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9492433/