Mock Stub 和 Moq Setup 的行为不同? Moq 中 Stub 的等价物是什么?
Mock Stub and Moq Setup act differently ? What is the equivalent of Stub in Moq?
我在两个不同的项目中编写单元测试时意识到,Moq 中的设置行为不同于 Rhino-Mocks 中的存根。
一个 class 使用 Mock,它具有我存根的这些场景之一
for (int i=0; i<ObjectAList.Count; i++)
{
_translator.Stub(x => x.TranslateToObjectB(ObjectAList[i])).Return(ObjectBList[i]);
}
上面的例子很有魅力。
但是,当我尝试在另一个使用 Moq 的项目中使用安装程序做同样的事情时,它失败了。
for (int i=0; i<ObjectAList.Count; i++)
{
_translator.SetUp(x => x.TranslateToObjectB(ObjectAList[i])).Returns(ObjectBList[i]);
}
相反,我不得不做这样的事情,
int i = 0;
foreach (var ObjectA in ObjectAList)
{
_translator.Setup(x => x.ConvertToProcessingFilter(ObjectA)).Returns(ObjectBList[i]);
i++;
}
我只是在寻找存根与安装程序表现如此不同的原因。如果这是设置的预期结果,那么 Moq 中存根的等价物是什么?
你所看到的,与有关。
有:
for (int i=0; i<ObjectAList.Count; i++)
{
_translator.Setup(x => x.TranslateToObjectB(ObjectAList[i])).Returns(ObjectBList[i]);
}
您正在关闭(捕获) for
迭代变量。该行为将取决于何时 模拟框架评估 lambda 表达式。
尝试:
for (int i=0; i<ObjectAList.Count; i++)
{
var j = i;
_translator.Setup(x => x.TranslateToObjectB(ObjectAList[j])).Returns(ObjectBList[j]);
}
相反。会成功吗?
您也可以只进行一种设置,类似于此:
_translator.Setup(x => x.TranslateToObjectB(It.IsAny<ObjAType>()))
.Returns((ObjAType a) => ObjectBList[ObjectAList.IndexOf(a)]);
我在两个不同的项目中编写单元测试时意识到,Moq 中的设置行为不同于 Rhino-Mocks 中的存根。
一个 class 使用 Mock,它具有我存根的这些场景之一
for (int i=0; i<ObjectAList.Count; i++)
{
_translator.Stub(x => x.TranslateToObjectB(ObjectAList[i])).Return(ObjectBList[i]);
}
上面的例子很有魅力。
但是,当我尝试在另一个使用 Moq 的项目中使用安装程序做同样的事情时,它失败了。
for (int i=0; i<ObjectAList.Count; i++)
{
_translator.SetUp(x => x.TranslateToObjectB(ObjectAList[i])).Returns(ObjectBList[i]);
}
相反,我不得不做这样的事情,
int i = 0;
foreach (var ObjectA in ObjectAList)
{
_translator.Setup(x => x.ConvertToProcessingFilter(ObjectA)).Returns(ObjectBList[i]);
i++;
}
我只是在寻找存根与安装程序表现如此不同的原因。如果这是设置的预期结果,那么 Moq 中存根的等价物是什么?
你所看到的,与
有:
for (int i=0; i<ObjectAList.Count; i++)
{
_translator.Setup(x => x.TranslateToObjectB(ObjectAList[i])).Returns(ObjectBList[i]);
}
您正在关闭(捕获) for
迭代变量。该行为将取决于何时 模拟框架评估 lambda 表达式。
尝试:
for (int i=0; i<ObjectAList.Count; i++)
{
var j = i;
_translator.Setup(x => x.TranslateToObjectB(ObjectAList[j])).Returns(ObjectBList[j]);
}
相反。会成功吗?
您也可以只进行一种设置,类似于此:
_translator.Setup(x => x.TranslateToObjectB(It.IsAny<ObjAType>()))
.Returns((ObjAType a) => ObjectBList[ObjectAList.IndexOf(a)]);