2017-12-01 27 views
0

静的初期化ブロックを追加して、コードベースで広く使用されている基本クラスに変更を加えました。私は今、これはいくつかのケースで働いているPowerMock @SuppressStaticInitializationForはテストクラス内のネストされたクラスでは機能しません

@SuppressStaticInitializationFor("com.mycompany.WidelyUsedBaseClass") 

を追加することによって、それらを動作させるためにしようと、私たちのユニットテストのすべてをつもりですが、私はそれが内部クラスを持ってテストクラスを動作させることはできませんWidelyUsedBaseClassを拡張します。 (なぜこれらのネストされたクラスが存在するのか尋ねないでください、なぜ標準的なモックでは不十分なのか分かりませんが、とにかく、私はテストロジックを理解しているとは確信していないので、これらの内部クラスを使用して)

は、ここで私が何を意味するかの例を示します。

@RunWith(PowerMockRunner.class) 
@SuppressStaticInitializationFor("com.mycompany.WidelyUsedBaseClass") // <-- This isn't working! I can still see <clinit> in the exception when the test fails... 
public class SomeTestsFromAnotherTeam 
{ 
    // test logic... 
    // more test logic... 
    Stub myStub = new Stub(); 
    // more test logic... 

    private class Stub extends WidelyUsedBaseClass 
    { 
     // some other logic... 
    } 
} 

は、私はこの問題はnew Stub()コールで発生していると思います。

答えて

0

さて、私は何が起こっているのか正確に把握することはできませんでしたが、問題を回避する方法を見つけました。

内部クラスを囲むクラスの外側に移動した後にテストが合格します。私は同じファイルのSomeTestsFromAnotherTeamクラスの後に置いて、それをプライベートにしました:

public class SomeTestsFromAnotherTeam 
{ 
    // ... 
} 

class Stub extends WidelyUsedBaseClass 
{ 
    // ... 
} 
関連する問題