前提・実現したいこと
古いJUnit、JMockitを利用したテストフレームワークの修正を行っているのですが、
元のコードでJMockitのNonStrictExpectationsを利用していた部分をExpectationsに書き換える修正をしており、
その部分が単純に動作せず困っています。
やりたいことは、ConnectionをMockにしてcommitを打たせないようにし、
DBアクセスを伴うコードのテストに再現性をもたせることです。
発生している問題・エラーメッセージ
JUnitを実行すると該当箇所で以下の例外が発生します。
Caused by: java.lang.IllegalStateException: JMockit didn't get initialized; please check the -javaagent JVM initialization parameter was used at mockit.internal.startup.Startup.verifyInitialization(Startup.java:91) at mockit.Invocations.<clinit>(Invocations.java:23)
該当のソースコード
java
1 @Mocked 2 private Connection con; 3 4 private void fetchConnection() { 5 try { 6 this.con = getConnection(); 7 this.con.setAutoCommit(false); 8 new Expectations(this.con) { ←ここで例外発生 9 { 10 con.commit(); 11 result = new Delegate() { 12 @SuppressWarnings("unused") 13 private void commit() { 14 System.out.println("commit is not activated, mocked by framework"); 15 } 16 }; 17 } 18 }; 19 } catch (SQLException e) { 20 e.printStackTrace(); 21 } 22 }
試したこと
元のコードでは上記ExpectationsがNonStrictExpectationsになっていたものをそのまま変えただけです。
おそらくExpectationsのコンストラクタに渡しているjava.sql.Connectionがインターフェースであることが問題だと思うのですが、
このようにデータベースに接続するコードをテストしたいときにコミットを打たせないことを実現するには、
どのように実装をすればよいのでしょうか?
補足情報
利用しているライブラリバージョン
jmockit-1.44
junit-4.12
あなたの回答
tips
プレビュー