1

クラスBを拡張するクラスAの単体テストを作成しています。Mockitoを使用しており、両方のクラスを使用するためにorg.slf4j.loggerをモックしたいと思います。問題は、クラスAがクラスBのメソッドを呼び出すときに、モックされたロガーがクラスBに注入されないため、NPEを取得することです。これを正常にテストする方法はありますか?

public class ClassA extends ClassB {

    @Inject
    private static final Logger LOGGER = LoggerFactory.getLogger(ClassA.class);

    public void classAMethod { 
        LOGGER.debug("u wot m8");
        this.classBMethod();
}

public class ClassB {

    @Inject
    private static final Logger LOGGER = LoggerFactory.getLogger(ClassB.class);

    public void classBMethod { 
        LOGGER.debug("u wot m8");
    }

}



public class ClassATest { 

    @InjectMocks 
    private ClassA classA = new ClassA
    @Mock
    private Logger mockLogger;

    @Test
    public void testClassA() {
          classA.classAMethod ();
          verify(mockLogger, (times, 2)).debug(Mockito.anyString());
    }
}
4

2 に答える 2

4

Mockitoは静的な最終フィールドを挿入できません。実際、定義上、最終フィールドを2回割り当てることはできないため、誰もできません。そして、Mockitoはとにかく静的フィールドを注入しません。インスタンスフィールドのみ。

ドキュメントを参照してください:

ただし、静的または最終的なフィールドは無視されます。

于 2012-11-23T20:41:09.867 に答える
1

Java EE 6 @Injectを使用している場合、CDIコンテナーの外部では機能しません。これは、仕様の一部です。これが単体テストの場合は、自分で提供する必要があります。

于 2012-11-23T15:32:01.603 に答える