前提・実現したいこと
Javaのユニットテストで、JUnit+jmockitを利用しているのですが、Mockが動作しません。
(エラーは発生せず、テスト自体はNGで動作。)
同プロジェクトの他テストメソッドは正常に動作しています。
該当のソースコードを掲載しますので、アドバイスいただけますでしょうか。
該当のソースコード
Sampleクラスのcommit()がテスト対象メソッドです。
commit()内の「this.connection.commit();」をMockしています。
■テスト対象クラス
Java
1public class Sample { 2 private Connection connection = null; 3 4 public void connectTransaction() throws SampleException, ClassNotFoundException, SQLException 5 { 6 // 初期設定ファイル読込み 7 InitConfigFile file = new InitConfigFile(); 8 file.readFile(); 9 10 // コネクション取得 11 connection = SQLRequest.createConnection(file.getDbURL(), file.getUserID(), file.getPassword()); 12 13 // 自動コミット無効化 14 connection.setAutoCommit(false); 15 } 16 17 public void commit() throws SampleException 18 { 19 try 20 { 21 if(null == this.connection) 22 { 23 // システムエラー 24 throw new SampleException("9999", null, "Connectionオブジェクトがnull"); 25 } 26 27 // クローズ済か? 28 if(true != this.connection.isClosed()) 29 { 30 // 自動コミットモードか? 31 if(true != this.connection.getAutoCommit()) 32 { 33 // コミット 34 // Mock対象 35 this.connection.commit(); 36 } 37 } 38 } 39 catch (SQLException e) 40 { 41 // DBエラー 42 String detail = String.format("Commit失敗/ORA-[%d]/[%s]",e.getErrorCode(), e.getMessage()); 43 throw new SampleException("0101", e, detail); 44 } 45 catch (SampleException e) 46 { 47 throw e; // MICExceptionは上位にスルー 48 } 49 catch(Throwable e) 50 { 51 // DBエラー 52 String detail = String.format("Commit失敗/[%s]", e.getMessage()); 53 throw new SampleException("0101", e, detail); 54 } 55 } 56}
■テストクラス
Java
1import mockit.Mock; 2import mockit.MockUp; 3 4public class SampleTest 5{ 6 @Test 7 public void test_Commit() throws SampleException 8 { 9 new MockUp<Connection>() { 10 @Mock 11 void commit() throws SQLException{ 12 throw new SQLException("SQLExceptionテスト"); 13 } 14 }; 15 16 Sample sample = new Sample(); 17 try 18 { 19 // メソッド実行前準備 20 sample.connectTransaction(); 21 22 // メソッド実行 23 sample.commit(); 24 25 // 今はMockが動作せず、ここでテスト失敗となる。 26 fail("commit:失敗"); 27 } 28 catch(SampleException e) 29 { 30 // 評価 31 assertEquals("commit:失敗", "0101", e.getErrorCode()); 32 assertEquals("commit:失敗", SQLException.class, e.getExeptionObject().getClass()); 33 assertEquals("commit:失敗", "Commit失敗/ORA-[0]/[SQLExceptionテスト]", e.getErrorDetail()); 34 } 35 catch(Throwable e) 36 { 37 fail("commit:失敗"); 38 } 39 finally 40 { 41 if(null != con) 42 { 43 sample.close(); 44 } 45 } 46 } 47}
補足情報(FW/ツールのバージョンなど)
動作環境は以下になります。
jmockit-1.18
JavaSE 1.8
JUnit 4
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。