2011-11-09 52 views
5

Tôi đang thử nghiệm đơn vị phương pháp thực hiện một số thao tác tuần tự hóa. Tôi dự định giả lập logic serialization. Mã này là như sau:jMockit: Làm thế nào để mong đợi các nhà xây dựng gọi các đối tượng Mocked?

ObjectInputStream ois = new ObjectInputStream(new BufferedInputStream(new FileInputStream(file))); 

Tôi đã tạo ra các đối tượng giả sau đây:

@Mocked FileInputStream mockFIS; 

@Mocked BufferedInputStream mockBIS; 

@Mocked ObjectInputStream mockOIS; 

tôi đã thiết lập một khối NonStrictExpectations() nơi tôi muốn hy vọng các cuộc gọi constructor trên.

Bất kỳ ý tưởng nào về cách tôi có thể đạt được điều này?

Trả lời

10

Bạn có thể chỉ định bộ đầy đủ các Kỳ vọng cho một tập hợp tương tác nhất định. Từ Behavior-based testing with JMockit:

Xét nghiệm có thể cho các phương pháp doSomething() có thể thực hiện các trường hợp nơi SomeCheckedException bị ném, sau khi một số tùy ý của lặp thành công. Giả sử rằng chúng ta muốn (đối với bất cứ lý do) để kỷ lục một bộ hoàn chỉnh các kỳ vọng về sự tương tác giữa hai loại cổ phiếu này, chúng ta có thể viết các bài kiểm tra dưới đây:

@Test 
public void doSomethingHandlesSomeCheckedException() throws Exception 
{ 
    new Expectations() { 
    DependencyAbc abc; 

    { 
     new DependencyAbc(); // expect constructor 

     abc.intReturningMethod(); result = 3; 

     abc.stringReturningMethod(); 
     returns("str1", "str2"); 
     result = new SomeCheckedException(); 
    } 
    }; 

    new UnitUnderTest().doSomething(); 
} 
+2

Sau "abc" được xây dựng, có thể giúp bạn kiểm tra rằng nó được truyền vào một số phương pháp khác? def.someMethod (abc)? Tôi gặp vấn đề với điều này vì các tham chiếu không bằng nhau. –

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