Код: Выделить всё
[Test]
public void Test()
{
var mockGetter = new Mock();
var mockService = new Mock();
mockGetter.Setup(i => i.Get()).Returns(mockService.Object);
mockGetter.Object.Get();
mockService.Object.StartAsync(CancellationToken.None);
mockGetter.Verify(i => i.Get(), Times.Once);
mockGetter.VerifyNoOtherCalls();
}
public interface IHostedServiceGetter
{
public IHostedService Get();
}
Код: Выделить всё
Moq.MockException : Mock:
This mock failed verification due to the following unverified invocations:
IHostedService.StartAsync(CancellationToken)
Непонятно, почему это происходит. Я пытаюсь проверить все вызовыockGetter, не обращая внимания на вызовыockService. Я думаю, что верификатор будет проверять каждый макетный объект отдельно. Если у меня есть два совершенно несвязанных объекта, я не получаю аналогичного исключения. Например, этот тест проходит:
Код: Выделить всё
[Test]
public void Test()
{
var mockGetter = new Mock();
var mockService = new Mock();
mockGetter.Setup(i => i.Get()).Returns(new Mock().Object);
mockGetter.Object.Get();
mockService.Object.StartAsync(CancellationToken.None);
mockGetter.Verify(i => i.Get(), Times.Once);
mockGetter.VerifyNoOtherCalls();
}
Что здесь происходит, и как я могу заставить Moq игнорировать вызовы подмакета при проверке родительского макета?
Изменить:Я понял это, изменив макет наockGetter.Setup(i => i.Get()).Returns(() =>ockService.Object); тест внезапно начинает работать. Я до сих пор не понимаю, почему это ведет себя так, и хотел бы получить объяснение, если оно у кого-нибудь есть.
Подробнее здесь: https://stackoverflow.com/questions/792 ... -sub-mocks