Tôi đang cố gắng kiểm tra đơn vị một hành động điều khiển sử dụng nhà cung cấp thành viên để cập nhật chi tiết người dùng. Tôi đang sử dụng Moq cho đến nay đã được dễ sử dụng.Mocking VB.NET Phương pháp với Moq
Vấn đề là tôi dường như không thể làm cho nó giả lập cuộc gọi đến các phương thức không trả lại bất cứ điều gì.
<TestMethod()> _
Public Sub Can_Update_User()
' Arrange
_membershipService.Setup(Function(x) x.UpdateUser(It.IsAny(Of MembershipUser)))
Dim controller As New UsersController(_membershipService.Object, _roleProvider.Object, _supportWorksService.Object, _portalClientService.Object)
' Act
Dim result As ViewResult = controller.Edit("testUser", New FormCollection)
' Assert
Assert.AreEqual("Index", result.ViewName)
End Sub
Các thiết lập của dịch vụ thành viên chế giễu sẽ không biên dịch, lỗi này là:
độ phân giải quá tải thất bại vì không thể tiếp cận 'Thiết lập' có thể được gọi với những lập luận này:
'Chức năng công cộng Thiết lập (của TRESult) (biểu hiện là System.Linq.Expressions.Expression (Of System.Func (Of Services.IMembershipServic e, TResult))) Moq.Language.Flow.ISetup (Trong số Dịch vụ.IMembershipService, TResult) ': Biểu thức không sản xuất một giá trị.
'Chức năng Cài đặt Công (Tất TResult) (biểu hiện Như System.Linq.Expressions.Expression (Tất System.Func (Tất Services.IMembershipService, TResult))) Như Moq.Language.Flow. ISetup (Trong số Dịch vụ.IMembershipService, TResult) ': Loại dữ liệu của loại tham số không thể được suy ra từ các đối số này. Chỉ định dữ liệu loại (s) rõ ràng có thể sửa lỗi này .
'Public Function Setup (biểu hiện Như System.Linq.Expressions.Expression (Tất System.Action (Tất Services.IMembershipService))) Như Moq.Language.Flow.ISetup (Tất Services.IMembershipService) ': Biểu thức không tạo ra giá trị.
Tôi đã bỏ lỡ điều gì? Tôi sẽ phải tạo ra một lớp giả hơn là sử dụng Moq bất cứ lúc nào lớp học của tôi có một phương pháp tôi muốn gọi vào nó?
Edit:
Ok, đọc một chút xung quanh cho thấy đây là do cách lambdas được thể hiện trong VB sử dụng Function() mà phải có một kết quả.
Có ai tìm thấy một công việc xung quanh cho điều này hoặc tôi sẽ phải mương Moq cho phương pháp giả mạo?
: (Xấu hổ thực sự, ngoài việc tôi thực sự yêu Moq. Nếu tôi đề nghị với ông chủ chúng tôi phát triển thêm một năm để họ có thể lấy VB10 ra tôi nghĩ anh ta sẽ giết tôi! – Nick