Có thể sửa đổi thông số yêu cầu của phương thức giả không? Cụ thể là tôi đang tìm cách thay đổi buffer
trong ví dụ sau đây thành một mảng byte được điền trước.Làm thế nào để sửa đổi một tham số yêu cầu của một phương pháp giả lập với Moq?
Ví dụ:
int MockedClass.Read(byte[] buffer, int offset, int count)
Giải thích:
Calling Read
tải count
byte đọc từ offset
vào mảng byte cung cấp buffer
.
Bây giờ tôi muốn có vùng đệm sau khi cuộc gọi đến Read
được thực hiện trong mã ứng dụng của tôi. Điều đó có thể không?
Nếu có, tôi sẽ thực hiện các cuộc gọi liên tiếp đến số Read
như thế nào? Tôi muốn các cuộc gọi liên tiếp trả về một bộ đệm khác nhau mỗi lần nếu có thể.
EDIT:
sử dụng lệnh Setup
như thế này:
MockedClass.Setup(x => x.Read(It.IsAny<byte[]>(), It.IsAny<int>(), It.IsAny<int>()).Callback((byte[] buffer, int offset, int count) => buffer[0] = 0xAA);
mang lại cho tôi một vấn đề lạ khi thực hiện các thử nghiệm đơn vị: Sau khi cuộc gọi đến Read
được thực hiện và các mã đại biểu (buffer[0] = 0xAA
) được thực thi trình gỡ lỗi cho thấy buffer
thực sự là null
và việc thực hiện kiểm tra đơn vị dừng lại sau khi thực hiện lệnh này. Cú pháp của tôi có bị bẻ cong hay là một lỗi?
Xin chào đánh dấu. Cảm ơn câu trả lời. Nếu tôi sử dụng mẫu này, kiểm thử đơn vị của tôi sẽ chỉ dừng lại ở điểm chính trong cuộc gọi lại khi ủy nhiệm được thực thi. Gỡ lỗi vấn đề cho thấy mảng byte đệm là 'null'. Bất kỳ ý tưởng nào tại sao điều đó có thể xảy ra? –
Không có gì trừ khi bạn chỉ định nó. Cuộc gọi Setup ở trên không * gán * biến bộ đệm - nó khớp với biến hiện tại. Trong bản chỉnh sửa của bạn, bạn khớp trên 'It.IsAny()', nhưng người gọi vẫn phải cung cấp giá trị. –