Использование Moq для проверки того, что вызовы выполняются в правильном порядке

Мне нужно протестировать следующий метод:

CreateOutput(IWriter writer)
{
    writer.Write(type);
    writer.Write(id);
    writer.Write(sender);

    // many more Write()s...
}

Я создал Moq'd IWriterи хочу убедиться, что Методы Write()вызываются в правильном порядке.

У меня есть следующий тестовый код:

var mockWriter = new Mock<IWriter>(MockBehavior.Strict);
var sequence = new MockSequence();
mockWriter.InSequence(sequence).Setup(x => x.Write(expectedType));
mockWriter.InSequence(sequence).Setup(x => x.Write(expectedId));
mockWriter.InSequence(sequence).Setup(x => x.Write(expectedSender));

Однако второй вызов Write()в CreateOutput()(для записи значения id) выдает MockExceptionс сообщением «Сбой вызова IWriter.Write() из-за имитации поведения Strict. Все вызовы на макете должны иметь соответствующую настройку. ».

Мне также трудно найти какую-либо окончательную, актуальную документацию/примеры последовательностей Moq.

Я что-то делаю не так, или я не могу настроить последовательность тем же методом? Если нет, есть ли альтернатива, которую я могу использовать (предпочтительно с использованием Moq/NUnit)?

53
задан g t 15 May 2012 в 03:25
поделиться