簡體   English   中英

I am trying to mock a final java class using Mockito 2, class is getting mocked but I still get Unfinished Stubbing Exception

[英]I am trying to mock a final java class using Mockito 2, class is getting mocked but I still get Unfinished Stubbing Exception

我也包含了 MockMaker 文件 - src\test\resources\mockito-extensions\org.mockito.plugins.MockMaker

相關代碼如圖所示,其中 SignatureValidator 是最終類-

mockValidator = mock(org.opensaml.xmlsec.signature.support.SignatureValidator.class);
mockSignature = mock(SignatureImpl.class);
mockCredential = mock(org.opensaml.security.credential.Credential.class);  

@Test(expected = SamlSecurityException.class)
    public void testGivenGoodProfileButInvalidSignature() throws SignatureException {
        when(mockSamlToken.getSignature()).thenReturn(mockSignature);
        when(mockSamlToken.getSAMLIssuerName()).thenReturn("fakeIssuerName");
        doThrow(SignatureException.class).when(mockValidator).validate(mockSignature,mockCredential); // getting exception for this line

        validator.validate(mockSamlToken);
    }

堆棧跟蹤-

java.lang.Exception: Unexpected exception, expected<com.cerner.cto.security.saml.SamlSecurityException> but was<org.mockito.exceptions.misusing.UnfinishedStubbingException>
    at org.junit.internal.runners.statements.ExpectException.evaluate(ExpectException.java:28)
    at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
    at org.junit.internal.runners.statements.RunAfters.evaluate(RunAfters.java:27)
    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.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:86)
    at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:538)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:760)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:460)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:206)
Caused by: org.mockito.exceptions.misusing.UnfinishedStubbingException: 
Unfinished stubbing detected here:
-> at com.cerner.cto.security.saml.opensaml.SignatureValidatorTest.testGivenGoodProfileButInvalidSignature(SignatureValidatorTest.java:84)

E.g. thenReturn() may be missing.
Examples of correct stubbing:
    when(mock.isOk()).thenReturn(true);
    when(mock.isOk()).thenThrow(exception);
    doThrow(exception).when(mock).someVoidMethod();
Hints:
 1. missing thenReturn()
 2. you are trying to stub a final method, which is not supported
 3: you are stubbing the behaviour of another mock inside before 'thenReturn' instruction if completed
at org.opensaml.xmlsec.signature.impl.SignatureImpl.getXMLSignature(SignatureImpl.java:153)

SignatureValidator.validate(...)是一個 static 方法,不是實例方法; 所以有問題的陳述:

doThrow(SignatureException.class).when(mockValidator).validate(mockSignature,mockCredential);

相當於:

doThrow(SignatureException.class).when(mockValidator);
SignatureValidator.validate(mockSignature,mockCredential);

我想你可以明白為什么那是“未完成的存根”。

. (...) instead of . (...) , since the former is so misleading. Some compilers will warn you about this.) (不幸的是 Java 甚至允許您編寫 . (...)而不是 . (...) ,因為前者具有誤導性。一些編譯器會警告您這一點。)

有關如何模擬 static 方法的信息,請參閱此堆棧溢出問題: Mocking static 方法與 Z4D13Z7383CA816EACBBC33 .

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM