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

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

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

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

Q&A

解決済

1回答

3134閲覧

JMockit1.48から古いバージョンに変更しところ、デバッグでエラーになる。

nobureon2

総合スコア21

JUnit

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

Java

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

Eclipse

Eclipseは、IBM社で開発された統合開発環境のひとつです。2001年11月にオープンソース化されました。 たくさんのプラグインがあり自由に機能を追加をすることができるため、開発ツールにおける共通プラットフォームとして位置づけられています。 Eclipse自体は、Javaで実装されています。

Apache Tomcat

Apache TomcatはApache Software Foundation (ASF)で開発されたオープンソースのWebコンテナです。

0グッド

1クリップ

投稿2021/06/09 08:36

質問
「JMockit1.48」から「JMockit1.34」に変更して、ユニットテストの実行をしたところ、
下記のエラーとなりテスト実行が出来ませんでした。
エラーの解決策を教えていただきたいです。

理由
古いバージョンへの変更理由として、ユニットテストでprivateメソッドをモックにする必要がありました。
「JMockit1.48」ではprivateメソッドのモックは対応していないため、対応している古いバージョンへ変更しています。

リンク内容

環境
Java:JavaSE 1.8
JUnit:4
Tomcat:Apache Tomcat 8.5
eclipse:Version: 2021-03 (4.19.0) Build id: 20210312-0638
jmockit:jmockit-1.34

エラー内容

java.lang.SecurityException: class "org.junit.runner.Runner"'s signer information does not match signer information of other classes in the same package

at java.lang.ClassLoader.checkCerts(Unknown Source) at java.lang.ClassLoader.preDefineClass(Unknown Source) at java.lang.ClassLoader.defineClass(Unknown Source) at java.security.SecureClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.defineClass(Unknown Source) at java.net.URLClassLoader.access$100(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.net.URLClassLoader$1.run(Unknown Source) at java.security.AccessController.doPrivileged(Native Method) at java.net.URLClassLoader.findClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) at java.lang.ClassLoader.loadClass(Unknown Source) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:82) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:74) at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:49) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:525) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:768) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464) at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)

ソースコード
※:メソッド名等、置き換えています。

java

1 @Test 2 public void test() throws SQLException 3 { 4 new Expectations() {{ 5 6 // モックするメソッドを呼ぶ 7 sample.close(); 8 9 // 発生させたい例外をresultにセットする 10 result = new SQLException("SQLExceptionテスト"); 11 }}; 12 13 Connection con = null; 14 15 try 16 { 17 // プライベートメソッドアクセス 18 Class<?> cls = Class.forName("db.dao.Hoge"); 19 Class<?>[] argTypes = {Sample.class}; 20 Method method = cls.getDeclaredMethod("close", argTypes); 21 method.setAccessible(true); // private メソッドのアクセスを許可する 22 23 // パラメータ設定 24 con = SQLRequest.createConnection(this.dbURL, this.userID, this.password); 25 Sample sample = Sample.create(con); 26 27 // メソッド実行 28 ErrorLogDAO errorDAO = new ErrorLogDAO(con); 29 Object[] args = {sqlReq}; 30 method.invoke(errorDAO, args); 31 32 fail("close:失敗"); 33 } 34 catch (InvocationTargetException e) 35 { 36 // 評価 37 FugaException e2 = (FugaException)e.getCause(); 38 assertEquals("close:失敗", "XXXXXXXXXXXXXX", e2.getErrorCode()); 39 } 40 }

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

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

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

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

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

nobureon2

2021/06/10 04:56

返信ありがとうございます。 いただいたURL情報で解決しました! Javaのビルド・パス>順序およびエクスポートの設定で、 以下の順番に変更したところ、動作しました。 ・JRE ・JUnit4 ・jmockit-1.34 もとの設定は、こちらのURLを参考にしていました。 http://blog.tagbangers.co.jp/2017/02/02/unittest-jmockito-1
neonemo

2021/06/10 05:20

解決したようで何よりです。 それでしたら、こちらにある通り 解決に至った手順などを記載し、 後進の方々が同じ轍を踏まないように、ナレッジ化するのが良いかと思います。 https://teratail.com/help#resolve-myself
guest

回答1

0

自己解決

返信ありがとうございます。
いただいたURL情報で解決しました!
Javaのビルド・パス>順序およびエクスポートの設定で、
以下の順番に変更したところ、動作しました。

・JRE
・JUnit4
・jmockit-1.34

もとの設定は、こちらのURLを参考にしていました。

http://blog.tagbangers.co.jp/2017/02/02/unittest-jmockito-1

投稿2021/06/10 09:08

nobureon2

総合スコア21

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

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

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問