【发布时间】: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)
我知道我的理解存在差距。 如何实现上述目标?
有人试过做类似的事情吗?
我尝试过的相关主题:
【问题讨论】:
-
它到底是怎么不起作用的?编译错误,因为
Class.getMethod(...)返回Method,当然,而不是Class[]? (顺便说一句,Error←VirtualMachineError(“抛出表示 Java 虚拟机已损坏或已耗尽继续运行所需的资源。”)←UnknownError读取:“当未知时抛出但是Java虚拟机发生了严重的异常。“这肯定不是你想扔的。) -
嗨 GeroldBroser,这给了我未完成的存根异常。