ちょっとあるコードをデバッグしていて、方法がわからなかったので調べてみました。
サンプルとして、こんなコードを用意します。
src/main/java/App.java
public class App { public static void main(String... args) { new App().add(2, 3); } public int add(int a, int b) { return a + b; } }
テストコード。
src/test/java/AppTest.java
import static org.assertj.core.api.Assertions.*; import org.junit.Test; public class AppTest { @Test public void test() { App sut = new App(); assertThat(sut.add(2, 3)) .isEqualTo(5); } }
これらを使って、mvn testやmvn exec:javaを行う時に、JavaVMへ引数を与えることを考えます。例えば、-Xmxとか。
今回は、Bytemanのスクリプトを用意しました。
trace.btm
RULE trace app CLASS App METHOD add AT ENTRY IF TRUE DO traceln("*** args: " + $1 + ", " + $2 + " ***") ENDRULE
maven-surefire-pluginの場合
argLineを使えばよいらしいです。
http://maven.apache.org/surefire/maven-surefire-plugin/test-mojo.html
実行。
$ mvn test -DargLine=-javaagent:$BYTEMAN_HOME/lib/byteman.jar=script:trace.btm
結果。
------------------------------------------------------- T E S T S ------------------------------------------------------- Running AppTest *** args: 2, 3 *** Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 0.797 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0
ちゃんと、スクリプトの内容が織り込まれました。