2016-02-09 81 views
5

私が取り組んでいるライブラリに対して100%コードカバレッジを得るために取り組んでいます。私はswitch文とカバレッジにいくつか問題があるようです。switch文のJacocoカバレッジ

私は現在、すべての新しいバージョンがRobolectricsと壊れているように見えるので、Jacoco 0.7.2を使用しています。

私は、単純なswitch文をテスト:私が書いた

public enum Type { 
    NONE, LEGACY, AKS 
} 

private static Class<?> getCipherClass(Type type) { 
    switch (type) { 
     case LEGACY: 
      return CipherWrapperLegacy.class; 
     case AKS: 
      return CipherWrapperAks.class; 
     default: 
      return null; 
    } 
} 

テストは、以下のチェック(私はメソッドがプライベートであるような反射を使用する必要があります)含まれています

final CipherWrapper instance = CipherWrapper.createInstance(mockContext, CipherWrapper.Type.LEGACY, ALIAS); 
assertNotNull(instance); 

Method getCipherMethod = TestUtils.makeMethodAccessible(CipherWrapper.class, "getCipherClass", CipherWrapper.Type.class); 
assertNull(getCipherMethod.invoke(instance, CipherWrapper.Type.NONE)); 
assertEquals(CipherWrapperAks.class, getCipherMethod.invoke(instance, CipherWrapper.Type.AKS)); 
assertEquals(CipherWrapperLegacy.class, getCipherMethod.invoke(instance, CipherWrapper.Type.LEGACY)); 

を結果ではありません私が期待したもの:

Jacoco code coverage result

黄色の線が欠けていることが示唆されているので、画像は少し混乱します。緑色のアイコンは、3つの支店のうち3つが対象であることを示しています。

また、スイッチケースをcase NONEにして、フォールスルーするようにテストしましたが、何も変更されませんでした。

私ができる唯一のことは、スイッチをif/elseに置き換えて100%カバレッジを得ることです。

現在、私は98%のカバレッジを持っていますが、私は何も概要をもとに逃しません: Jacoco overall coverage

+5

'null 'を渡したときに、一つのことをテストしているわけではありません... –

+3

' type'にヌル値を渡しているテストケースが1つあります。これは ' NullPointerException'を返します。 (正直なところ、私は入る前に伸びを止めるためにストップし、同じ点でジョーンズが盛り上がる...) –

+0

本当...しかし、なぜそれはどこかの枝として言及されていないのですか?概要は、私はnullパスを逃した場合、通常どんな複雑さも見逃していないことを示しています...とにかくそれをテストし、結果を返すでしょう – WarrenFaith

答えて

1

invokeメソッドを使用すると、匿名の変数に入れて好きではない場合:

getCipherMethod.invoke(instance, (CipherWrapper.Type) null); 

次にしてみてください

CipherWrapper.Type nullType = null; 
getCipherMethod.invoke(instance, nullType); 

また、呼び出し例外が単にinvoによって発生した例外をラッピングしているかどうかを確認する必要があります呼び出し自体のエラーではなくメソッドの呼び出し。

+0

確かに、 'invoke()'は新しい例外を作成し、私の場合は元々、 "原因"としてNullPointerExceptionを持っているようです。 catchブロックは次のようになります: 'catch(InvocationTargetException e){if(e.getCause()instanceof NullPointerException} {....}}' – WarrenFaith

関連する問題