2012-04-16 14 views
0

私はorockles oracle ArrayDescriptorに問題があります。ここでは、コード例を示します。 レッツは、私が識別するArrayDescriptor一部が嘲笑すべきどのようにこのPowerMockとmocking oracle 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を模擬しようとしましたが、助けにはなりませんでした。

がうまくいけば、誰かがオフ(あなたがそれを使用しているクラスの内部クラスすることができます)独自のクラスの1行のメソッドに:)

答えて

0

移動に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);