Moq 4.5フレームワークのSetupSequence
メソッドを使用しようとしています。Moq SetupSequenceが機能しない
嘲笑されなければならないクラス:
public class OutputManager {
public virtual string WriteMessage(string message) {
// write a message
}
}
モック:
var outputManagerMock = new Mock<OutputManager>();
var writeMessageCalls = 0;
var currentMessage = String.Empty;
outputManagerMock.Setup(o => o.WriteMessage(It.IsAny<string>())).Callback((string m) => {
writeMessageCalls++;
message = m;
});
このコードは正常に動作します。しかし、WriteMessage
メソッドの呼び出しごとに異なる設定をしたいと思います。まあ、私はSetupSequence
代わりのSetup
使用:
var outputManagerMock = new Mock<OutputManager>();
var writeMessageCalls = 0;
var firstMessage = String.Empty;
var secondMessage = String.Empty;
outputManagerMock.SetupSequence(o => o.WriteMessage(It.IsAny<string>()))
.Callback((string m) => {
writeMessageCalls++;
firstMessage = m;
}).Callback((string m) => {
writeMessageCalls++;
secondMessage = m;
});
は、その後、私はエラーを持っている:私はここに可能な解決策を見つけた
Error CS0411 The type arguments for method
'SequenceExtensions.SetupSequence<TMock, TResult>(Mock<TMock>, Expression<Func<TMock, TResult>>)'
cannot be inferred from the usage.
Try specifying the type arguments explicitly.
からSetupSequence in Moq。しかし、それは回避策のように見えます。
は、あなたが実際に 'SetupSequence' – Nkosi
はまた' OutputManager.WriteMessage'が仮想であるべきか、部品番号は、例外がスローされます使用してコードを表示します。 – Nkosi
はい、それはもちろん仮想です。コードサンプルを更新しました。 – Sergey