4

Java 1.7のmavenでcobertura 2.6を使用しています

            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>cobertura-maven-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <formats>
                        <format>html</format>
                        <format>xml</format>
                    </formats>
                </configuration>
            </plugin>

しかし、java7 の新しい try-with-resource 機能を使用すると、「存在しない catch」ブロックがテストにないことがわかります...それは、try ブロックの閉じ括弧をマークします

何が問題なのですか?またはどうすればそれらをテストできますか?

4

1 に答える 1

2

問題は、try with resources ブロックのすべてのケースをおそらくテストしていないことです。次のようなものを書くときはいつでも:

try(Autocloseable ac = new Autocloseable()) {
   //do something
} catch(Exception e) {
   //Do something with e
}

コンパイラは次のように解釈します。

Autocloseable ac = null;
Exception e = null;
try {
   ac = new Autocloseable();
   //Do something
} catch (Exception e1) {
   e = e1
   //Do something with exception
} finally {
  if(ac != null) {
     try {
       ac.close();
     } catch (Exception e2) {
        throw e == null? e2 : e;
     }
     if(e != null ) throw e; 
  }
}

正確にはそうではありませんが、全体的な考え方なので、実際のコード分岐が思ったよりもはるかに多いことがわかります。これにより、カバレッジを改善する方法についてのアイデアが得られることを願っています。

于 2014-05-23T20:05:53.063 に答える