Tôi nhận được đối tượng Moq để trả về các giá trị khác nhau cho các cuộc gọi liên tiếp đến một phương thức. Điều này được thực hiện theo phương pháp tiện ích mở rộng này:Trả lại các kết quả khác nhau hoặc ném ngoại lệ từ các cuộc gọi liên tiếp đến Moq Mock
public static void ReturnsInOrder<T, TResult>(this ISetup<T, TResult> setup, params TResult[] results) where T : class
{
setup.Returns(new Queue<TResult>(results).Dequeue);
}
Bây giờ tôi muốn một trong các cuộc gọi để ném ngoại lệ trong khi những người khác trả lại điều gì đó. Có ai làm điều này trước khi?
Nếu tôi làm điều này
mock.Setup(m => m.SomeMethod())
.Throws(new Exception());
mock.Setup(m => m.SomeMethod())
.Returns("ok");
thì các thiết lập đầu tiên được ghi đè và chỉ thiết lập thứ hai vẫn còn.
(khá phức tạp) Giải pháp này là không cần thiết nữa kể từ Moq đã hỗ trợ cho phương pháp SetupSequence. Xem câu trả lời của tôi bên dưới để biết ví dụ. – nashwan