Mockito dường như đang ném một số UnfinishedVerificationException
khi tôi nghĩ rằng tôi đã làm mọi thứ chính xác. Đây là trường hợp thử nghiệm một phần của tôi:Mockito cung cấp cho UnfinishedVerificationException khi có vẻ như OK
HttpServletRequest req = mock(HttpServletRequest.class);
when(req.getHeader("Authorization")).thenReturn("foo");
HttpServletResponse res = mock(HttpServletResponse.class);
classUnderTest.doMethod(req, res); // Use the mock
verify(res, never());
verify(req).setAttribute(anyString(), anyObject());
Và đây là lớp một phần và phương pháp:
class ClassUnderTest extends AnotherClass {
@Override
public String doMethod(ServletRequest req, ServletRequest res) {
// etc.
return "someString";
}
}
Bỏ qua thực tế là bạn nên giao diện không bao giờ giả bạn không sở hữu, tại sao Mockito đem lại cho tôi những điều sau đây thông điệp?
org.mockito.exceptions.misusing.UnfinishedVerificationException:
Missing method call for verify(mock) here:
-> at (redacted)
Example of correct verification:
verify(mock).doSomething()
Also, this error might show up because you verify either of: final/private/equals()/hashCode() methods.
Those methods *cannot* be stubbed/verified.
at [test method name and class redacted]
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:47)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:44)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:271)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:70)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:238)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:63)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:236)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:53)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:229)
at org.junit.runners.ParentRunner.run(ParentRunner.java:309)
at org.mockito.internal.runners.JUnit45AndHigherRunnerImpl.run(JUnit45AndHigherRunnerImpl.java:37)
at org.mockito.runners.MockitoJUnitRunner.run(MockitoJUnitRunner.java:62)
at org.junit.runner.JUnitCore.run(JUnitCore.java:160)
... etc
Lớp 'classUnderTest' trông như thế nào? Chữ ký của phương thức là gì? Nó hoạt động tốt cho tôi với các lớp/phương thức không phải là công khai. –
Tôi đã cập nhật câu hỏi với ClassUnderTest – Jonathan
Dòng được đề cập đến trong thông báo (bạn đã biên tập lại) giống như dòng nơi ngoại lệ thực sự bị ném? Thông thường, nếu bạn đã xác minh chưa hoàn tất, Mockito sẽ không báo cáo nó cho đến thời điểm NEXT bạn sử dụng phương thức Mockito. Nó cũng có thể là vấn đề của bạn là trong phương pháp thử nghiệm ngay lập tức TRƯỚC KHI một trong những điều này. Đó là lý do tại sao Mockito báo cáo số dòng nơi lỗi xảy ra SEPARATELY từ chính bản thân dấu vết. –