Tôi hiện đang viết kiểm tra đơn vị và chế nhạo một phụ thuộc bằng cách sử dụng khung công tác Moq. Để làm được điều này, tôi đã tạo ra một Mock như vậy:Alter Mock <IType> đối tượng sau. Bất động sản đã được gọi là
Mock<ITraceProvider> traceProviderMock = new Mock<ITraceProvider>();
traceProviderMock.Setup(x => x.GetTraceContext(It.IsAny<string>())).Returns("test");
ITraceProvider traceObj = traceProviderMock.Object;
Tuy nhiên sau này tôi muốn thay đổi hành vi của các mô hình nhiều hơn một chút vì vậy tôi gọi Setup
trên đối tượng Mock một lần nữa:
traceProviderMock.Setup(x => x.GetTracer(It.IsAny<string>())).Returns("tracer");
Bây giờ mà không cần gọi lại traceProviderMock.Object
, hành vi giả lập mới này có được phản ánh trong traceObj
không? Đó là những gì tôi muốn là trường hợp.
Điều này chắc chắn phù hợp với phương pháp Verify()
nhưng không xuất hiện cho phương thức Setup
.
Lý do tôi muốn làm điều này, là do thực tế tôi đã xây dựng biểu đồ phụ thuộc đầy đủ trong phương pháp Thiết lập thử nghiệm bằng cách sử dụng phụ thuộc giả định. Tôi chỉ muốn thay đổi hành vi của một trong những phụ thuộc giả lập cho thử nghiệm cụ thể của tôi. Các bài kiểm tra tiếp theo cũng sẽ áp dụng các chuyên môn của riêng họ cho sự phụ thuộc giả định.
Phương thức 'GetTracer' có được thiết lập trong phương pháp thiết lập thử nghiệm của bạn không? –
Không, nó được thiết lập trong một phương pháp thử nghiệm cụ thể. Đó là chuyên môn cụ thể của bài kiểm tra cho Mock nếu điều đó có ý nghĩa. –
Tôi đã thử nghiệm này, và nó đã làm việc cho tôi. Tôi có thể thiết lập phương thức 'GetTracer' sau khi nhận được đối tượng từ' traceProviderMock', và nó trả về giá trị mong đợi. Bạn có chắc chắn rằng xác nhận của bạn được thiết lập chính xác không? Bạn có thể bước qua mã trong trình gỡ lỗi, nếu bạn chưa làm? –