Trong RhinoMocks, bạn chỉ có thể nói cho mocks của bạn để IgnoreArguments như một tuyên bố chăn. Trong Moq, có vẻ như, bạn phải chỉ định It.IsAny() cho mỗi đối số. Tuy nhiên, điều này không làm việc cho các đối số ref và out. Làm thế nào tôi có thể kiểm tra các phương pháp sau đây mà tôi cần phải MOQ cuộc gọi dịch vụ nội bộ để trả về một kết quả cụ thể:Làm thế nào để làm cho Moq bỏ qua đối số được ref hoặc ra
public void MyMethod() {
// DoStuff
IList<SomeObject> errors = new List<SomeObject>();
var result = _service.DoSomething(ref errors, ref param1, param2);
// Do more stuff
}
Phương pháp thử:
public void TestOfMyMethod() {
// Setup
var moqService = new Mock<IMyService>();
IList<String> errors;
var model = new MyModel();
// This returns null, presumably becuase "errors"
// here does not refer to the same object as "errors" in MyMethod
moqService.Setup(t => t.DoSomething(ref errors, ref model, It.IsAny<SomeType>()).
Returns(new OtherType()));
}
UPDATE: Vì vậy, thay đổi lỗi từ "ref" để "out" hoạt động. Vì vậy, có vẻ như vấn đề thực sự là có một tham số ref mà bạn không thể tiêm.
Bạn có thể gửi chữ ký của 'DoSomething' bởi vì trong mẫu của bạn nó có 3 đối số 'lỗi ra, param1, param2' nhưng trong thử nghiệm của bạn bạn đang gọi nó với hai đối số' lỗi ra, It.IsAny() 'Có thể bạn đang chế nhạo một tình trạng quá tải sai, vì mã của bạn nên hoạt động, hãy xem [moq phần phương thức trợ giúp] (http://code.google.com/p/moq/wiki/QuickStart). –
nemesv
Đó chỉ là một ví dụ - nhưng tôi đã cập nhật thử nghiệm song song với mã ví dụ – sydneyos