Moq expectations on the same method twice in a row
I am trying to set up exceptions for a method that is called twice in a row with different parameters. Like this:
var adapter = new Mock<IKeyAdapter>();
adapter.Setup(x => x.ImportKey(It.IsAny<Guid>(), key, It.IsAny<string>(), publicTicket)).Returns(Guid.NewGuid());
adapter.Setup(x => x.ImportKey(It.IsAny<Guid>(), key, It.IsAny<string>(), privateTicket)).Returns(Guid.Empty);
I wan't the first to pass and the second to fail. Currently it seems that the secon开发者_如何转开发d setup overwrites the first.
Is this possible with Moq?
You are correct that the second expectation is overwriting the first. This appears to be a current limitation. Some workarounds have been devised as follows:
- Moq Sequences which can obtained here at github.
- Overloading
IExpect.Returns
to take an expression rather than a value as described here, and elaborated on here and here.
精彩评论