2010-07-03 28 views
28

Đây là một đơn vị kiểm tra từ một trong các bộ điều khiển của tôi trong một dự án ASP.NET MVC, sử dụng NUnit và Moq:Moq - xác minh rằng không có phương pháp được gọi là

[Test] 
public void Create_job_with_modelstate_errors_fails() 
{ 
    var job = new JobDto(); 
    this.controller.ModelState.AddModelError("", ""); 

    ActionResult result = this.controller.Create(job); 

    this.jobService.Verify(p => p.SaveJob(It.IsAny<JobDto>()), Times.Never()); 

    // some other asserts removed for brevity 
} 

này hoạt động tốt, nhưng từ một bảo trì quan điểm của tôi nghĩ rằng dòng này là tiết hơn nó cần phải được:

this.postService.Verify(p => p.SavePost(It.IsAny<PostDto>()), Times.Never()); 

gì tôi thực sự muốn để có thể làm là một cái gì đó tương đương với ...

this.postService.VerifyNoMethodsCalled(); 

... vì tất cả những gì tôi quan tâm là bộ điều khiển của tôi không gọi bất kỳ phương thức nào trên dịch vụ. Điều này có thể sử dụng Moq không?

+1

tìm kiếm của Google: Nếu bạn quan tâm đến xác minh rằng chỉ là một SINGLE, phương pháp CỤ không được gọi , đây là câu hỏi bạn muốn thay thế: http://stackoverflow.com/questions/537308/how-to-verify-that-method-was-not-called-in-moq –

Trả lời

37

Bạn có thể tạo Mô hình với MockBehavior.Strict, ví dụ:

this.postService = new Mock<IPostService>(MockBehavior.Strict); 

Bằng cách đó, nếu bạn không cài đặt bất cứ kỳ vọng, bất kỳ cuộc gọi đến this.postService sẽ thất bại

+0

Ah, cảm ơn. Tôi không biết về MockBehavior.Strict. – richeym

+0

Nó cũng rất tiện dụng để gỡ lỗi khi bạn đang cố gắng mô phỏng một thứ gì đó giống như ngữ cảnh điều khiển MVC, vì thông báo lỗi cung cấp cho bạn khi bạn không có thiết lập mong đợi trực quan hơn nhiều so với trường hợp ngoại lệ tham chiếu null mặc định MockBehavior.Loose –

+0

điều cần biết, cảm ơn – CRice

Các vấn đề liên quan