2012-09-13 31 views

Trả lời

56

underlying expression tree API không hỗ trợ đối số tùy chọn.

Đối với mã được biên dịch IL, trình biên dịch C# chèn giá trị mặc định vào thời gian biên dịch (mã hóa cứng), vì CLR không hỗ trợ các phương thức gọi với đối số tùy chọn hoặc khi đối số không được cung cấp rõ ràng.

+2

Điều này có bằng cách nào đó bao gồm quá tải không? Tôi đã nhận được điều này khi tôi thực hiện quá tải. Một cái gì đó như void Blah (chuỗi a) và void Blah (đối tượng a). Khi tôi cố gắng để MOQ ra một cuộc gọi đến phiên bản với đối tượng, nó đã cho tôi lỗi này. – vbullinger

+4

Quá tải được hỗ trợ đầy đủ theo nghĩa là một quá tải cụ thể sẽ được mã hóa cứng vào cây. – usr

+0

Thông báo lỗi khá khó hiểu, nhưng câu trả lời này cho thấy cách này, tôi có tham số tùy chọn với giá trị mặc định trên phương thức đang cố gắng giả lập. – vpalmu

14

Có cùng thông báo khi cố gắng sử dụng Mock.setup để giả lập phương thức có nhiều tham số mặc định. Tôi chỉ cần thêm các tham số bổ sung trong lambda.

void someMethod(string arg1 = "", string arg2 = "") 

mockedObject.Setup(x => x.someMethod(It.IsAny<string>(), It.IsAny<string>() 
Các vấn đề liên quan