Używanie Moq do sprawdzania połączeń odbywa się we właściwej kolejności

Muszę przetestować następującą metodę:

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

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

Stworzyłem Moq'dIWriter i chcę mieć pewność, żeWrite() metody są wywoływane we właściwej kolejności.

Mam następujący kod testowy:

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));

Jednak drugie połączenie doWrite() wCreateOutput() (aby napisaćid wartość) rzuca aMockException z wiadomościąWywołanie IWriter.Write () nie powiodło się z udawanym zachowaniem Ścisłe. Wszystkie wywołania na makiecie muszą mieć odpowiednią konfigurację.„

Trudno mi też znaleźć jakąkolwiek definitywną, aktualną dokumentację / przykłady sekwencji Moq.

Czy robię coś złego lub czy nie mogę ustawić sekwencji za pomocą tej samej metody? Jeśli nie, czy istnieje alternatywa, której mogę użyć (najlepiej używając Moq / NUnit)?

questionAnswers(6)

yourAnswerToTheQuestion