gpt4 book ai didi

java - EasyMock 和 JNA - 模拟通用返回类型

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:24:08 25 4
gpt4 key购买 nike

我正在尝试使用 EasyMock 模拟以下 JNA 调用

convInterface = (ConvInterface)  Native.loadLibrary(libraryLocation,ConvInterface.class);

使用这个测试方法

@Test
public void testLib() {
Capture<Class<?>> myClassCapture = EasyMock.newCapture();
PowerMock.mockStatic(Native.class);

EasyMock.expect(Native.loadLibrary(EasyMock.isA(String.class), EasyMock.capture(myClassCapture))).andReturn(mockConvInterface);
PowerMock.replay(Native.class);

ConvServiceImpl myLib = new ConvServiceImpl();
myLib.instantiateConvLibrary();

PowerMock.verify(Native.class);
}

我在使用 JNA 库的 4.3.0 版时遇到以下错误

The method andReturn(capture#1-of ?) in the type IExpectationSetters<capture#1-of ?> is not applicable for the arguments (ConvInterface)

相同的代码适用于 JNA 库的 4.2.0 版

这是我试图模拟的方法的方法签名

版本 4.2.0

public static Object loadLibrary(String name, Class interfaceClass) {

4.3 版

public static <T> T loadLibrary(String name, Class<T> interfaceClass) {

如何使用 EasyMock 模拟通用返回类型的返回?

谢谢达米安

最佳答案

问题来自您输入的 Capture<Class<?>> .此通配符表示您要捕获 something .让我们称之为capture#1 .所以loadLibrary正在上课 capture#1在参数中并返回一个 capture#1实例。所以andReturn期望一个 capture#1在参数中。

但是你传递的是 ConvInterface这不是(显然)capture#1 .

解决方法很简单。就做 Capture<Class<ConvInterface>> myClassCapture = EasyMock.newCapture();因为这是你所期望的loadLibrary得到。

关于java - EasyMock 和 JNA - 模拟通用返回类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45531745/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com