代码之家  ›  专栏  ›  技术社区  ›  OhleC

当junit3在类路径上时,Mockito失败

  •  0
  • OhleC  · 技术社区  · 7 年前

    我在做一个有很多传统junit3测试的项目。我们最近已经切换到JUnit5,并通过JUnitVintage运行旧的测试。由于几个原因,我们不能轻易地摆脱junit3依赖,所以它仍然在类路径上(到目前为止还没有引起任何问题)。

    mockito.verify() ,在捕获参数差异的测试中:

    public class TestTestTest {
        interface Foo {
            void frobnicate(int a);
        }
    
        @Test
        void testMockito() {
            Foo foo = mock(Foo.class);
            foo.frobnicate(42);
            verify(foo).frobnicate(43);
        }
    }
    

    结果

    java.lang.VerifyError: Bad return type
    Exception Details:
      Location:
        org/mockito/internal/junit/ExceptionFactory$JUnitArgsAreDifferent.create(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)Ljava/lang/AssertionError; @10: areturn
      Reason:
        Type 'org/mockito/exceptions/verification/junit/ArgumentsAreDifferent' (current frame, stack[0]) is not assignable to 'java/lang/AssertionError' (from method signature)
      Current Frame:
        bci: @10
        flags: { }
        locals: { 'java/lang/String', 'java/lang/String', 'java/lang/String' }
        stack: { 'org/mockito/exceptions/verification/junit/ArgumentsAreDifferent' }
      Bytecode:
        0x0000000: bb00 0259 2a2b 2cb7 0003 b0            
    
    
        at org.mockito.internal.junit.ExceptionFactory.canLoadJunitClass(ExceptionFactory.java:33)
        at org.mockito.internal.junit.ExceptionFactory.<clinit>(ExceptionFactory.java:12)
        at org.mockito.internal.exceptions.Reporter.argumentsAreDifferent(Reporter.java:313)
        at org.mockito.internal.verification.checkers.MissingInvocationChecker.checkMissingInvocation(MissingInvocationChecker.java:43)
        at org.mockito.internal.verification.Times.verify(Times.java:37)
        at org.mockito.internal.verification.MockAwareVerificationMode.verify(MockAwareVerificationMode.java:27)
        at org.mockito.internal.handler.MockHandlerImpl.handle(MockHandlerImpl.java:72)
        at org.mockito.internal.handler.NullResultGuardian.handle(NullResultGuardian.java:29)
        at org.mockito.internal.handler.InvocationNotifierHandler.handle(InvocationNotifierHandler.java:35)
        at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:63)
        at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor.doIntercept(MockMethodInterceptor.java:49)
        at org.mockito.internal.creation.bytebuddy.MockMethodInterceptor$DispatcherDefaultingToRealMethod.interceptAbstract(MockMethodInterceptor.java:128)
        at test.TestTestTest$Foo$MockitoMock$448839763.setValue(Unknown Source)
        at test.TestTestTest.testMockito(TestTestTest.java:26)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:498)
        at org.junit.platform.commons.util.ReflectionUtils.invokeMethod(ReflectionUtils.java:513)
        at org.junit.jupiter.engine.execution.ExecutableInvoker.invoke(ExecutableInvoker.java:115)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeTestMethod$6(TestMethodTestDescriptor.java:170)
        at org.junit.jupiter.engine.execution.ThrowableCollector.execute(ThrowableCollector.java:40)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeTestMethod(TestMethodTestDescriptor.java:166)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:113)
        at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:58)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$3(HierarchicalTestExecutor.java:113)
        at org.junit.platform.engine.support.hierarchical.SingleTestExecutor.executeSafely(SingleTestExecutor.java:66)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.executeRecursively(HierarchicalTestExecutor.java:108)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.execute(HierarchicalTestExecutor.java:79)
        at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor$NodeExecutor.lambda$executeRecursively$2(HierarchicalTestExecutor.java:121)
    

    ArgumentsAreDifferent AssertionError ,但不是少年 断言错误

    假设我不能摆脱junit3依赖,有解决方法吗?

    0 回复  |  直到 7 年前
        1
  •  0
  •   VDanyliuk    6 年前

    我对莫基托也有同样的错误。但是有 com.google.android.tools:dx:1.7 而不是JUnit3。但是看起来这个依赖关系至少包含了一些JUnit3的包和类。 问题是Mockito创造了 ArgumentsAreDifferent junit.framework.ComparisonFailure . 在JUnit 4中 ComparisonFailure 通过中间阶级 java.lang.AssertionError 比较失败 不延伸 AssertionError

    我修复了它,只是排除了这个依赖性,因为它实际上不是我需要的。