PRHWってなんでっしゃろ
Program Request Handle Work Area control blockということだ。
つまるところは、MQの接続ハンドルとかを置いておくエリアのようだ。
control blockのレイアウトがわかったわけでもないので役には立たない。
GradleのtestLogging
testLoggingの初期値(LogLevel別)
調べたことを表にまとめるとこうだった。
debug | info | lifecycle | warn | quiet | error | ||
---|---|---|---|---|---|---|---|
events | STARTED | ○ | × | × | × | × | × |
PASSED | ○ | × | × | × | × | × | |
SKIPPED | ○ | ○ | × | × | × | × | |
FAILED | ○ | ○ | ○ | × | × | × | |
STANDARD_OUT | ○ | ○ | × | × | × | × | |
STANDARD_ERROR | ○ | ○ | × | × | × | × | |
displayGranularity | 2 | 2 | 2 | 2 | 2 | 2 | |
maxGranularity | -1 | -1 | -1 | -1 | -1 | -1 | |
minGranularity | 0 | -1 | -1 | -1 | -1 | -1 | |
showExceptions | true | true | true | true | true | true | |
showCauses | true | true | true | true | true | true | |
showStackTraces | true | true | true | true | true | true | |
exceptionFormat | FULL | FULL | SHORT | FULL | FULL | FULL | |
stackTraceFilters | ENTRY_POINT | × | × | × | × | × | × |
TRUNCATE | × | ○ | ○ | ○ | ○ | ○ | |
GROOVY | × | × | × | × | × | × | |
showStandardStreams | true | true | false | false | false | false |
テストの開始ログが欲しい
lifecycleだとテストが動いてるのか止まっているのか良くわからない。
仮に初期値のままやるのであれば、gradle --debugとか頭おかしいことをすることになる。
では、lifecycleのeventsにSTARTEDを加えるのか?
それだとテストメソッドごとにログがでてきて憤死する。
せめて、テストクラスごとにログがでてくれればいい。
そういうときって、TestタスクのbeforeSuiteを書けばできそうだ。
test { beforeSuite { desc -> logger.lifecycle("{} {}",desc.name, tasks.testing.logging.TestLogEvent.STARTED) } }
あと、gradle --infoのときはテストメソッドの開始ログ、終了ログを出してやろう。
でも、標準出力と標準エラーはごめんこうむりたい。
test { testLogging { info { events "started","passed","skipped","failed" } } }
lifecycleだけexceptionFormat=SHORTなのは嫌
test {
exceptionFormat "FULL"
}
もしくは
test {
testLogging {
lifecycle {
exceptionFormat "FULL"
}
}
}
テスト結果の統計を見たい
何もしなくてもTestタスク全体の統計はでるけど、テストクラス単位のも出してみるか。
そういう時はafterSuiteを使う。
ちょっと懲りすぎかもしれないがこういうコード。
test { afterSuite { desc, result -> def event = tasks.testing.logging.TestLogEvent.FAILED def level = logging.LogLevel.ERROR if( tasks.testing.TestResult.ResultType.SUCCESS == result.resultType ){ event = tasks.testing.logging.TestLogEvent.PASSED level = logging.LogLevel.LIFECYCLE } else if ( tasks.testing.TestResult.ResultType.SKIPPED == result.resultType ){ event = tasks.testing.logging.TestLogEvent.SKIPPED level = logging.LogLevel.WARN } logger.log(level, "{} {} total={} passed={} skipped={} failed={} elapse={} sec", desc.className, event, result.testCount, result.successfulTestCount, result.skippedTestCount, result.failedTestCount, (result.endTime - result.startTime)/1000) } }
独自クラスローダーとJacoco
ダイエット
ダイエットの方針
高いカロリーを認識する
松屋
日高屋
なか卯
マクドナルド
ドミノピザ
夜の食事を500kcalに抑える
野菜ジュースは飲まない
シリアルも取らない
運動してないならプロテインを取らない
基礎代謝のことを考える
脂肪1kg 7700kcal
体重計には乗らない
長風呂をする
ELECOM スマートフォン用 防水ケース JIS保護等級 IP47取得 iPhone Android 水に浮く ネックストラップ付属 4.7インチ 汎用 ブルー P-01WPSBU
- 出版社/メーカー: エレコム
- 発売日: 2014/03/07
- メディア: エレクトロニクス
- この商品を含むブログを見る
オウルテック iPhone6s/6sPlus Xperia GALAXY Note3も入る 大きめサイズのスマートフォン用防水・防塵ケース 保護等級IP68取得 OWL-MAWP03(BK)
- 出版社/メーカー: オウルテック
- 発売日: 2013/05/15
- メディア: エレクトロニクス
- この商品を含むブログを見る
部分痩せはどうする
心拍数を測定する
- 作者: 本川達雄
- 出版社/メーカー: 中央公論社
- 発売日: 1992/08
- メディア: 新書
- 購入: 26人 クリック: 1,301回
- この商品を含むブログ (168件) を見る
目標心拍数=運動強度×(最大心拍数-安静時心拍数)+安静時心拍数
筋肉をつけて痩せるなんて考えない
実は筋肉が1kg増えることで上がる基礎代謝はたった13kcalなんです。
永谷園 1杯でしじみ70個分のちから みそ汁 3食入×10個
- 出版社/メーカー: 永谷園
- メディア: 食品&飲料
- この商品を含むブログを見る
永谷園 お茶碗1杯でしじみ70個分のちから しじみソフトふりかけ 40g×5個
- 出版社/メーカー: 永谷園
- メディア: 食品&飲料
- この商品を含むブログを見る
JMockitで拡張クラスローダーに読まれるクラスをモックするのを足掻いた結果
- lib/extにjarを置く
- -Djava.ext.dirsでディレクトリを指定
- 拡張クラスローダーに寄せる
- アプリケーションクラスローダーに寄せる
gradleのTestFilterのパターンの書き方がイマイチだ
gradleのTestタスクにfilterが書ける。
このfilterに書くときのパターンの指定の解釈がうざい。
gradle/TestSelectionMatcher.java at master · gradle/gradle · GitHub
指定したパターン文字列を、アスタリスクでスプリットして、
それぞれの頭に".*"を付けてからパターンコンパイルしているように見える。
アスタリスク以外は、Pattern.quote(String)で、全部リテラルにしている。
ピリオドもリテラルになるじゃないか。
test01、test02メソッドの二つだけをヒットさせたときに、
正規表現で[1-2]みたいなのを書きたいけど解釈してくれないよね。
我慢してピリオドにしたとしてもリテラルに解釈されたら無理だよね。
二回書けということなのかよ。
test << { filter { includeTestsMatching '*test01' includeTestsMatching '*test02' } }
どうせPattern.compileするのに、なんで正規表現を受け付けない。