2017-04-13 14 views
0

以下の簡略化されたJUnitテストを実行しようとすると、成功しますがエラーメッセージが表示されます。すべてのテストインスタンスの作成時最初!Powermock:すべてのテストインスタンスが最初に作成されたときに通知がサポートされない

@RunWith(PowerMockRunner.class) 
@PowerMockRunnerDelegate(BlockJUnit4ClassRunner.class) 
@PrepareForTest({ A.class }) 
public class TestA extends TestB { 
    @Test 
    public void test() throws Exception { 
     assertEquals(true, true); 
    } 
} 

public class TestB {} 
public class A {} 

私は@PowerMockRunnerDelegate(BlockJUnit4ClassRunner.class)、またはextends TestBまたは@PrepareForTest({ A.class })を削除すると、メッセージが消えます。 emfpy @PrepareForTest({ })でもエラーメッセージが表示されます。

私はこれを見つけましたが、BlockJUnit4ClassRunnerを使用していないため同じ問題ではありません。

このエラーメッセージが表示される理由を理解しようとしています。

最新バージョンのPowermock(1.6.6)とJUnit 4.12を使用し、java8を使用してテストを実行しています。

答えて

1

PowerMockは、jUnitイベントメッセージを拡張し、テストライフサークル中に追加のイベントを発生させます。 PowerMockTestListenerを使用して、すべてのjUnitイベントとその他のPowerMockイベントを聴くことができます。

このイベントの1つでは、テストごとにインスタンスを作成する必要がありました。 jUnitランナーは通常、クラス内の各テストメソッドごとにテストクラスの新しいインスタンスを作成しますが、それらのうちのいくつかはすべてのテストに対してクラスのインスタンスを1つしか作成できません。 @PowerMockRunnerDelegateを使用すると、テストインスタンスの作成を担当する代理ランナーが使用されます。

"test created"なしでイベント "test start"が発生した場合、PowerMockはテストが開始される前にすべてのテストインスタンスが作成されたことを検出し、内部イベントを発生させることができず、このメッセージはsystem.errに出力されます。だから、ポストで説明したのと同じ問題があります。

PowerMockには現在のところPowerMockTestListenerという1つの実装 - AnnotationEnablerがあります。この実装は、EasyMockとMockitoとの統合に使用され、@TestSubject,@Mockなどのアノテーションをサポートしています。結果として、コンソールでこのメッセージが表示されると、これらの機能が正しく動作しないことがあります。しかし、Mockitoの場合は、MockitoAnnotations.initMocks(this)を使用すると簡単に修正できます。

あなたが 'extends TestB'を削除すると、メッセージが消えてしまうのは非常に興味深いことです。私はこの事件をチェックし、それがなぜ起こるのかを調査します。

関連する問題