0

オラクルの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をモックしようとしましたが、役に立ちませんでした。

うまくいけば、誰かが助けることができます:)

4

1 に答える 1

0

offへの呼び出しをArrayDescriptor.createDescriptor( ... )独自のクラスの1行のメソッドに移動します(これは、それを使用しているクラスの内部クラスにすることができます)。この呼び出しを使用しているクラスに、新しいクラスのインスタンスを持つフィールドを追加します。セッターまたは特別なコンストラクターを使用して、このフィールドを通常の値とは異なる値に設定します。次に、内部クラスをモックし、のモックを返すようにし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 );
于 2012-04-17T06:47:09.163 に答える