【问题标题】:Mocking a method in a class dynamically动态模拟类中的方法
【发布时间】:2020-06-15 19:45:31
【问题描述】:

我对 Mockito 和 Spring 很陌生。 我试图模拟许多类的许多方法。我想创建一个功能,其中 bean 名称和方法名称可以作为输入作为字符串给出,它会抛出相同的异常。

示例 我有A类和B类

@Named
public Class A {
   public void methodInA() {
   System.out.println("In A"); 
  }
}

@Named
public Class B {
   public void methodInB() {
   System.out.println("In B"); 
  }
}


以下是我在测试中尝试做的事情。

测试配置:

@SpyBean
A a;

测试::

String className = "A";
String methodName = "methodInA";


Object bean = applicationContext.getBean("a");
Class clazzToSpy = bean.getClass();

Class[] paramTypes = clazzToSpy.getMethod(methodName);

Answer answer = new Answer() {
@Override
public Object answer(final InvocationOnMock invocationOnMock) throws Throwable {
   if(invocationOnMock.getMethod().getName().equals(methodName)) {
       throw new UnknownError("Manual Exception Created");
   }
   return invocationOnMock.callRealMethod();

  }
};

//Here I want to use the answer on the mock Something like below.

Method mockedMethod = clazzToSpy.getMethod(methodName, paramTypes);

Mockito.doAnswer(answer).when(mockedMethod)


我知道我的理解存在差距。 如何实现上述目标?

有人试过做类似的事情吗?

我尝试过的相关主题:

  1. Mocking Reflection based calls

  2. Mocking getClass method with PowerMockito

  3. mockito : mock method call with parameters by reflection

  4. Mockito: is it possible to combine mock with a method name to create a methodCall inside a when() call?

  5. Using Mockito to mock methods by reflection

【问题讨论】:

  • 它到底是怎么不起作用的?编译错误,因为Class.getMethod(...) 返回Method,当然,而不是Class[]? (顺便说一句,ErrorVirtualMachineError (“抛出表示 Java 虚拟机已损坏或已耗尽继续运行所需的资源。”)← UnknownError 读取:“当未知时抛出但是Java虚拟机发生了严重的异常。“这肯定不是你想扔的。)
  • 嗨 GeroldBroser,这给了我未完成的存根异常。

标签: java spring junit mockito


【解决方案1】:

这似乎不起作用,因为您:

@Spy
Method methodSpy;

Mockito 投掷:

org.mockito.exceptions.base.MockitoException: Unable to initialize @Spy annotated field 'methodSpy'.
Please ensure that the type 'Method' has a no-arg constructor.

如果你:

@Mock
Method methodMock;

它抛出:

org.mockito.exceptions.base.MockitoException:
Cannot mock/spy class java.lang.reflect.Method
Mockito cannot mock/spy because :
    - final class

在:

MockitoAnnotations.initMocks( this );

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-13
    • 1970-01-01
    相关资源
    最近更新 更多