2012-06-20 36 views
34

Lỗi chi tiết:khi tôi chạy thử nghiệm Mockito xảy ra WrongTypeOfReturnValue Exception

org.mockito.exceptions.misusing.WrongTypeOfReturnValue: 
Boolean cannot be returned by updateItemAttributesByJuId() 
updateItemAttributesByJuId() should return ResultRich 
This exception might occur in wrongly written multi-threaded tests. 
Please refer to Mockito FAQ on limitations of concurrency testing. 

mã của tôi:

@InjectMocks 
protected ItemArrangeManager arrangeManagerSpy = spy(new ItemArrangeManagerImpl()); 
@Mock 
protected JuItemWriteService juItemWriteService; 

when(arrangeManagerSpy 
    .updateItemAttributes(mapCaptor.capture(), eq(juId), eq(itemTO.getSellerId()))) 
    .thenReturn(false); 

Như bạn thấy, tôi kêu gọi when trên updateItemAttributes (mà không trả về một boolean) không trên updateItemAttributesByJuId.

  1. Tại sao Mockito cố gắng trả lại boolean từ updateItemAttributesByJuId?
  2. Làm cách nào để sửa lỗi này?

Trả lời

79

Theo https://groups.google.com/forum/?fromgroups#!topic/mockito/9WUvkhZUy90, bạn nên nói lại bạn

when(bar.getFoo()).thenReturn(fooBar) 

để

doReturn(fooBar).when(bar).getFoo() 
+0

Tks, tôi làm như thế này, sau đó nó hoạt động tốt –

+10

@confusedwindbell Xem xét đánh dấu câu trả lời là được chấp nhận nếu nó giải quyết được vấn đề của bạn. –

+0

Tôi đã có một lỗi tương tự và giải pháp này làm việc cho tôi. – YLombardi

20

Một lý do khác cho thông báo lỗi tương tự như đang cố gắng thử một phương pháp final. Người ta không nên cố gắng để thử phương pháp cuối cùng (xem Final method mocking).

Tôi cũng phải đối mặt với lỗi trong thử nghiệm đa luồng. Trả lời bởi gna đã làm việc trong trường hợp đó.

+0

đã giải quyết trường hợp của tôi [+1] –

1

Nếu bạn đang sử dụng chú thích, có thể bạn cần sử dụng @Mock thay vì @InjectMocks. Bởi vì @InjectMocks hoạt động như @Spy và @Mock cùng nhau. Và @Spy theo dõi các phương thức được thực hiện gần đây và bạn có thể cảm thấy rằng dữ liệu không chính xác được trả về/subbed.

+1

"' @ InjectMocks' hoạt động như '@ Spy' và' @ Mock' cùng nhau. " <- điều đó có vẻ sai với tôi. Bạn đã nghe từ đâu? –

2

Gần đây, tôi đã gặp sự cố này. Vấn đề là phương pháp mà tôi đang cố gắng giả lập không có công cụ sửa đổi truy cập. Thêm công khai giải quyết vấn đề.

2

Trong trường hợp của tôi, sự cố là do cố gắng giả lập phương pháp tĩnh và quên gọi mockStatic trên lớp học. Ngoài ra tôi quên bao gồm các lớp học vào @PrepareForTest()

0

Tôi có lỗi này vì trong thử nghiệm của tôi, tôi có hai kỳ vọng, một trên một mô hình và một vào loại bê tông

MyClass cls = new MyClass(); 
MyClass cls2 = Mockito.mock(Myclass.class); 
when(foo.bar(cls)).thenReturn(); 
when(foo.baz(cls2)).thenReturn(); 

tôi cố định nó bằng cách thay đổi cls để là một mô hình cũng như

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