PowerMock and mocking oracle ArrayDescriptor



我在嘲笑预言机ArrayDescriptor时遇到问题。下面是一个代码示例:假设我有这样的方法

    public void doSomething(){
    //some code here
    ArrayDescriptor arrayDescriptor = ArrayDescriptor.createDescriptor("TEST", connection);
    //some more code
     }

我应该如何模拟该数组描述符部分?我尝试了这样的事情:

PowerMock.mockStatic(ArrayDescriptor.class);
//connection is mocked
ArrayDescriptor arrayDescriptor = Mockito.mock(ArrayDescriptor.class);
//connection is also mocked
Mockito.when(ArrayDescriptor.createDescriptor("TEST", connection).thenReturn(arrayDescriptor);

但这不起作用,抛出某种与SQLName相关的nullpointerException,我试图嘲笑SQLName,但没有帮助。

希望有人可以帮助:)

调用ArrayDescriptor.createDescriptor( ... )移动到其自己的类的单行方法中(该方法可以是使用它的类的内部类)。 将字段添加到使用此调用的类,该字段具有新类的实例。 使用资源库或特殊构造函数将此字段设置为与常用字段不同的值。 然后模拟内部类,并让它返回ArrayDescriptor的模拟。 所以你可能会得到这样的东西。

public class MyClass{
    class ArrayDescriptorFactory{
        makeArrayDescriptor(String name, Connection connection){
            return ArrayDescriptor.createDescriptor(name, connection);
        }
    }
    private ArrayDescriptorFactory factory;
    public MyClass(){
        this( new ArrayDescriptorFactory());
    }
    MyClass(ArrayDescriptorFactory factory){
        this.factory = factory;
    }
    public void doSomething(){
        ... do stuff ...
        factory.makeArrayDescriptor( "something", someConnection );
        ... do more stuff ...
    }
}

并在测试中

@Mock private MyClass.ArrayDescriptorFactory mockFactory;
@Mock private ArrayDescriptor mockArrayDescriptor;
...
initMocks( this );
when( mockFactory.makeArrayDescriptor( anyString(), any( Connection.class )))
.thenReturn( mockArrayDescriptor );
MyClass toTest = new MyClass( mockFactory );

相关内容

  • 没有找到相关文章

最新更新