繁体   English   中英

PowerMock和模拟Oracle ArrayDescriptor

[英]PowerMock and mocking oracle ArrayDescriptor

我在嘲笑oracles ArrayDescriptor时遇到问题。 这是一个代码示例:假设我有类似这样的方法

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

我应该如何模拟arrayDescriptor部分? 我尝试过这样的事情:

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( ... )的调用移到其自己类的单行方法(可以是您使用它的类的内部类)。 在您使用此调用的类中添加一个具有新类实例的字段。 使用setter或特殊的构造函数将此字段设置为与通常值不同的值。 然后模拟内部类,并使其返回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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM