我正在尝试使用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模拟返回泛型返回类型?
由于 达明
答案 0 :(得分:3)
问题来自您输入something
。此通配符表示您要捕获capture#1
。我们称之为loadLibrary
。因此capture#1
在参数中获取capture#1
类并返回andReturn
实例。因此capture#1
要求ConvInterface
参数。
但是你传递的capture#1
不是(显然)Capture<Class<ConvInterface>> myClassCapture = EasyMock.newCapture();
。
解决方案很简单。只需loadLibrary
,因为这是您期望 private Vector3 _position;
private void DeterminePosition(float offset)
{
// In actual code, the _position is initialized under Start() method
// But for this simplification sake, I'll just put it here
_position = _position == null ? new Vector3(0, 0, 1f) : _position;
if (Direction == Direction.Up || Direction == Direction.RightUp || Direction == Direction.LeftUp)
{
_position.y = offset;
}
if (Direction == Direction.Down || Direction == Direction.RightDown || Direction == Direction.LeftDown)
{
_position.y = -offset;
}
if (Direction == Direction.Left || Direction == Direction.LeftDown || Direction == Direction.LeftUp)
{
_position.x = -offset;
}
if (Direction == Direction.Right || Direction == Direction.RightDown || Direction == Direction.RightUp)
{
_position.x = offset;
}
transform.position = _position;
}
获得的。