2010-02-01 26 views
6

Tôi có một phương pháp riêng mà phải trả lại true.I m sử dụng Nunit và MOQ Vì vậy, tôi có như sau:Làm cách nào tôi có thể khẳng định/xác minh Phương thức được bảo vệ bằng Moq?

[TestFixture] 
public class CustomerTestFixture 
{ 
    var customerMock=new Mock<ICustomer>() 
    customerMock.Protected().Setup<bool>("CanTestPrivateMethod").Returns(true); 

    // How do I assert it now since I cannot do 
    customerMock.Verify //Verify does not exists. 
} 

không thể tìm thấy bất cứ điều gì trên google cho bạn biết làm thế nào để kiểm tra nó. như bạn có thể thấy tôi có thể thiết lập cho nó nhưng không thể khẳng định.

Tôi có thiếu hiển nhiên không? Cảm ơn rất nhiều.

Trả lời

3

Bạn không muốn thử nghiệm phương thức trên mô hình. Bạn muốn kiểm tra phương thức trên một thể hiện của lớp thực tế. Cách để test a private method trên một lớp học là sử dụng một accessor. Lưu ý rằng VS sẽ tự động cung cấp cho bạn, hoặc bạn có thể "cuộn của riêng bạn" bằng cách sử dụng sự phản chiếu. Đối với một phương thức nội bộ, bạn cũng có thể thiết lập InternalsVisibleTo cho dự án thử nghiệm của bạn trong tệp AssemblyInfo.cs.

[TextFixture] 
public class CustomerTestFixture 
{ 
    var customer = new Customer(); 
    var accessor = new Customer_Accessor(new PrivateObject(customer)); 

    Assert.IsTrue(accessor.CanTestPrivateMethod()); 

} 

Khi bạn thử một đối tượng, mục đích đó được sử dụng làm phụ thuộc cho lớp thực tế đang được kiểm tra. Do đó, nó đủ để có thể thiết lập đối tượng giả để trả về các giá trị cụ thể. Bạn đang làm xác nhận của bạn trên lớp sử dụng sự phụ thuộc, không phải trên lớp giả. Bước xác minh đảm bảo rằng lớp của bạn đang được kiểm tra gọi là các phương thức trên các đối tượng giả theo các kỳ vọng bạn đã thiết lập.

+0

Cảm ơn bạn đã trả lời. Tôi muốn đối tượng giả lập của tôi.CanTestPrivateMethod trả về các giá trị cụ thể. Vì vậy, nếu tôi mã hóa "trả về true" theo phương pháp riêng của mình. Tôi vẫn có thể khẳng định điều đó? Theo quan điểm của tôi, tôi không nên thử nghiệm phương pháp riêng, nhưng đồng nghiệp của tôi nhấn mạnh vào phương pháp này. Vì vậy, tôi chỉ cố gắng tìm ra cách để làm điều đó bằng cách sử dụng MOQ. – user9969

+1

Bạn đang bỏ lỡ quan điểm của tôi. Đừng chế nhạo đối tượng đang thử nghiệm. Chỉ giả chế đó là phụ thuộc. Tạo một cá thể thực tế, thiết lập các điều kiện để phương thức riêng tư trả về một giá trị cụ thể, sau đó sử dụng accessor để kiểm tra xem phương thức đó có thực sự trả về giá trị đó không. Nhu cầu duy nhất cho mocks sẽ là nếu cá thể có một số phụ thuộc mà bạn sẽ sử dụng bên trong phương thức riêng của bạn. – tvanfosson

+0

Cảm ơn bạn đã dành thời gian và trả lời.Tôi đã nhận được điểm ngay bây giờ. – user9969

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