1

編集: バグへの JeffStorey リンクが正しいようです。アサーションを有効にすると、コンパイラは追加のコードを生成します。最終的に、到達不能なブランチが 1 つ作成されます。

メソッドコンストラクターの1つにこれらのアサートがあります

   public Board(int w, int h) {
            assert w >= 0 : "PRE1: width should be >= 0 but is " + w;
            assert h >= 0 : "PRE2: height should be >= 0 but is " + h;
    }

私はこれを行うことでそれをカバーしようとしています

public void testInvalidBoardWidth() {
    try {
        Board badBoard = new Board(-2, 2);
        fail();
    } catch (AssertionError err) {
        assertTrue(true);
    }
}

@Test
public void testFailBoardHeight() {
    try {
        Board InvalidBoard = new Board(2, -4);
        fail();
    } catch (AssertionError err) {
        assertTrue(true);
    }

そして再び値で

Board (-4 , 2)Board (2, 2)

そのため、アサートとパスの両方で失敗する場所をテストしました。私が間違っていない場合、すべてのケースをカバーしていますが、コード カバレッジ ツールの eclEmma Eclipse プラグインを使用すると、完全にはカバーされていないと主張されます。私はすでに-ea日食のカバレッジ引数を持っているので、アサーションが有効になっています。私のテストは不完全ですか、それともアサーションが完全にカバーされていない可能性がありますか? ありがとう。

4

2 に答える 2

3

アサーションが有効になっていない場合、4番目の「分岐」が発生すると思います。

私はここ数年、真の 100% カバレッジは不可能であることを認めてきました。この状況に加えて、(静的メソッドとフィールドのみを持つクラスのインスタンス化を防ぐための) プライベート コンストラクターと、ジェネリック クラスに関する (私にとって) 不思議なことがあります。他の状況があるかもしれません。

于 2015-05-01T03:25:23.720 に答える
0

はい、すべてカバーされています。ここには 3 つのパスしかありません。

  • w は < 0 & h > 0
  • h は < 0 & w > 0
  • w > 0 & h > 0

w < 0 & h < 0 を追加することもできますが、それではブランチ カバレッジが高くなりません。

于 2013-10-31T02:33:22.207 に答える