10

何がこのようなことを引き起こす可能性があります:

カバレッジ レポート フラグメント

この行def resultは、分岐がなくても 2/6 の分岐しかカバーしていないことを示していますが、実際には条件付きの次の行は問題ありません。

どうしたの?cobertura.serがビルド間でクリーンアップされていることを確認しました。

4

3 に答える 3

7

そのJARのソースをどこで入手できますか?

disableOptimizationsTransformation のjarソース コード

また、テストアプリのビルド段階でのみ、その JAR をクラスパスに含める方法はありますか?

// Remove the jar before the war is bundled
grails.war.resources = { stagingDir ->
  delete(file:"${stagingDir}/WEB-INF/lib/DisableOptimizationsTransformation-0.1-SNAPSHOT.jar")
}

ここの他の投稿から

于 2014-01-03T18:53:39.817 に答える
4

grails プロジェクトでも同じことに気付きました。これは、Groovy コンパイラーが作成する「最適化」ブランチが原因だと思います。

たとえば、このコード

def deleteSomething(params) {
   def result
   if(params.something && params.somethingelse)
      result = "something"
   else result = "something else"
}

コンパイルするとこんな感じ

public Object deleteSomething(Object params)
{
   CallSite[] arrayOfCallSite = $getCallSiteArray(); Object result = null; if ((!BytecodeInterface8.isOrigZ()) || (__$stMC) || (BytecodeInterface8.disabledStandardMetaClass())) {
      if (((DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[2].callGetProperty(params))) && (DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[3].callGetProperty(params))) ? 1 : 0) != 0) {
         String str1 = "something"; result = str1; return str1; } else {
         String str2 = "something else"; result = str2; return str2;
      }
   }
   else if (((DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[4].callGetProperty(params))) && (DefaultTypeTransformation.booleanUnbox(arrayOfCallSite[5].callGetProperty(params))) ? 1 : 0) != 0) {
      String str3 = "something"; result = str3; return str3; } else {
      String str4 = "something else"; result = str4; return str4; } return null;
}

詳細については、こちらをご覧ください。

于 2013-09-20T19:17:45.467 に答える