我有一个包含下面的方法,其中查询信息库,像这样一种服务:问题用模拟库
public IEnumerable<Variable> ListVariables(int instanceId, int instanceVersionId, TypeGroup typeGroup)
{
return
_variableRepository.Where(x => x.InstanceVersion.Instance.Id == instanceId && x.InstanceVersion.Version == instanceVersionId && x.VariableType.VariableTypeGroup.Id == Convert.ToInt32(typeGroup));
}
我试图写一个单元测试嘲笑这个调用,就像这样:
[Test]
public void ListVariables_Returns_Variables_From_Repository()
{
IEnumerable<Variable> reposVariables = new List<Variable>
{
new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value1"},
new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value2"},
new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value3"},
new Variable {InstanceVersion = new InstanceVersion(), VariableType = new VariableType(), Value = "test value4"}
};
var mockVariableRepository = new Mock<IVariableRepository>();
mockVariableRepository.Setup(y => y.Where(x => x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1 && x.VariableType.VariableTypeGroup.Id == 1)).Returns(reposVariables).Verifiable();
var service = CreateSpiralService(variableRepository: mockVariableRepository.Object);
var result = service.ListVariables(1,1,TypeGroup.Information).ToList<Variable>();
mockVariableRepository.Verify(y => y.Where(x => x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1 && x.VariableType.VariableTypeGroup.Id == 1), Times.Once()); ;
Assert.AreEqual(reposVariables, result);
}
但是当我运行它,我得到以下错误:
Moq.MockException :
Expected invocation on the mock once, but was 0 times: y => y.Where(x => (x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1) && x.VariableType.VariableTypeGroup.Id == 1)
Configured setups:
y => y.Where(x => (x.InstanceVersion.Instance.Id == 1 && x.InstanceVersion.Version == 1) && x.VariableType.VariableTypeGroup.Id == 1), Times.Never
Performed invocations:
IReadOnlyNoIdRepository`1.Where(x => (((x.InstanceVersion.Instance.Id == value(Core.Services.Spiral.SpiralService+<>c__DisplayClass8).instanceId) AndAlso (x.InstanceVersion.Version == value(Core.Services.Spiral.SpiralService+<>c__DisplayClass8).instanceVersionId)) AndAlso (x.VariableType.VariableTypeGroup.Id == ToInt32(Convert(value(Core.Services.Spiral.SpiralService+<>c__DisplayClass8).typeGroup)))))
看来,我通过在为回购协议的一部分,表达我的测试夹具中的sitory设置与服务本身中定义的表达式不匹配。随后,断言在最后不成立的,因为它“预计有4个项目的清单,但实际上返回0项列表”
没有人有任何想法可能是什么回事?
嗨,我已经更新了问题的第一线,因为我认为这可能是一个有点混乱。我的目的是嘲笑知识库,而不是服务,这就是你在回答中似乎做的事情。 – MichaelS