2015-01-19 17 views
9

Sau khi đọc: https://code.google.com/p/powermock/wiki/BypassEncapsulation tôi nhận ra, tôi không hiểu.Truy cập PowerMock thành viên riêng

Xem trong ví dụ này:

public class Bar{ 
    private Foo foo; 

    public void initFoo(){ 
     foo = new Foo(); 
    } 
} 

Làm thế nào tôi có thể truy cập vào các thành viên tin foo bằng cách sử dụng PowerMock (Ví dụ để xác minh rằng foo không phải là null)?

Lưu ý:
gì tôi không muốn được sửa đổi mã với phụ get phương pháp.

Chỉnh sửa:
Tôi nhận ra rằng tôi đã bỏ lỡ một khối mã mẫu trên trang được liên kết với giải pháp.

Giải pháp:

Whitebox.getInternalState(bar, "foo"); 
+0

Tôi khuyên bạn nên suy nghĩ cẩn thận trước khi viết loại thử nghiệm này, các đối số chống lại việc kiểm tra giá trị của biến riêng được tóm tắt tại đây: https://stackoverflow.com/questions/2981476/does-jmockit-have-any-drawbacks-at- Tất cả/7499979 # 7499979 – codebox

+0

Bài kiểm tra thực tế phức tạp hơn một chút và liên quan đến ngủ đông, phiên và phiên làm việc, tôi cố gắng kiểm tra dbInterface của chúng tôi mà không phải khởi tạo công cụ ngủ đông hoàn chỉnh. Trong hầu hết các phương thức, chúng ta sửa đổi trạng thái đối tượng và không có chức năng đầu vào/đầu ra thực. – Gobliins

Trả lời

15

Đó nên càng đơn giản như viết các lớp thử nghiệm sau đây:

public class BarTest { 
    @Test 
    public void testFooIsInitializedProperly() throws Exception { 
     // Arrange 
     Bar bar = new Bar(); 

     // Act 
     bar.initFoo(); 

     // Assert 
     Foo foo = Whitebox.getInternalState(bar, "foo"); 
     assertThat(foo, is(notNull(Foo.class))); 
    } 
} 

Thêm bên phải (tĩnh) nhập khẩu là trái như một bài tập cho người đọc:).

+0

Có bằng cách nào đó tôi đã bỏ qua mẫu mã trên trang. Câu trả lời của bạn là chính xác – Gobliins

+1

Tôi thích nhận xét "Sắp xếp, Hành động, Xác nhận". Tôi sử dụng "Setup, Test, Validate" nhưng giống như chiếc nhẫn của 3 As. – javaPlease42

+0

Tôi thực sự chuyển từ S-T-V sang A-A-A. Bài hát này thực sự làm cho âm thanh trở nên tốt đẹp. Nhưng quan trọng nhất (với chữ viết tắt): nó giúp bạn cấu trúc kiểm tra của bạn, làm cho nó khó khăn hơn để vô tình kiểm tra giả của bạn thay vì SUT của bạn. Tôi đã thấy điều đó xảy ra - do ba giai đoạn được trộn lẫn. – mthmulders

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