У меня есть служба, содержащая следующий метод, который запрашивает репозиторий, например:
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)))))
Кажется, что выражение, которое я передаю как часть настройки репозитория в моем тестовом приспособлении, не соответствует выражению, определенному вСам сервис.Впоследствии Assert в конце не выполняется, так как он «ожидает список из 4 элементов, но фактически возвращает список из 0 элементов»
Кто-нибудь знает, что может быть не так?