質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

Q&A

解決済

2回答

6511閲覧

jmockitでモックが動作しない。

nobureon2

総合スコア21

JUnit

JUnitは、Javaで開発されたプログラムのユニットテストを行うためのアプリケーションフレームワークです。簡単にプログラムのユニットテストを自動化することができ、結果もわかりやすく表示されるため効率的に開発時間を短縮できます。

Java

Javaは、1995年にサン・マイクロシステムズが開発したプログラミング言語です。表記法はC言語に似ていますが、既存のプログラミング言語の短所を踏まえていちから設計されており、最初からオブジェクト指向性を備えてデザインされています。セキュリティ面が強力であることや、ネットワーク環境での利用に向いていることが特徴です。Javaで作られたソフトウェアは基本的にいかなるプラットフォームでも作動します。

0グッド

0クリップ

投稿2021/06/23 07:24

編集2021/06/23 07:27

前提・実現したいこと

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

こちらに解決方法が載っていました。

https://teratail.com/questions/132667

投稿2021/06/24 09:12

nobureon2

総合スコア21

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

java

1Sample sample = new Sample();

jmockitでモックを作らずにnewで普通にインスタンス生成してるからではないでしょうか。

投稿2021/06/23 12:20

rysh

総合スコア874

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問