質問
「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 }
回答1件
あなたの回答
tips
プレビュー