問題タブ [jmockit]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
java - JMockit でクラスを部分的にモックしようとすると、ClassLoader が NullPointerException をスローする
Eclipse 3.6.1
Java 1.6.0_26
JMockit 0.999.10 の使用
更新: SSCCE を作成できました。以下に投稿しています。
UPDATE2: DaemonHelper を追加しました。さらに、コンストラクターから DaemonHelper を削除すると、代わりに ClassCircularityError が発生します。関連している?
クラスローダーからNPEを取得するときに、クラスのいくつかの依存関係をモックしながら、クラスの部分的なモックを実行しようとしています。NPE コール スタックを以下に示します。
私は次のDaemon
ようなクラスを持っています:
デーモンには次のような親があります。
次のようなヘルパー クラスがあります。
構成は次のようになります。
構成の親は次のようになります。
テストは次のようになります。
このテストを実行しようとすると、次のエラーが発生します。このエラーは、DaemonParent と Daemon Helper がスーパークラスとして java.lang.Thread を持っている場合にのみ表示されることに注意してください。
NonStrictExpectations
ブロックとブロックをコメントアウトしようとしましたVerifications
が、同じエラーが発生します。
NPE は currentThread() への呼び出しからスローされます...どのように失敗するかわかりません。
何か案は?
java - jUnit:プライベート メンバーの初期化に関する NPE
私jUnit
のBeanを初期化するテストがあります:
ShowProducts.javaNullPointerException
の次の行に移動しました。
テストでこのフィールドを適切に初期化する方法は?
編集:
顔構成:
.xhtml:
seam - Jmockit TestNG/JUnit NullPointerException with Seam
最近ずっと jmock を seam で使用していましたが、final/static/enum をモックするには不十分です。そこで、JMockit を使ってみました。ただし、実行するたびに NPE が発生します。デバッグすらできません。以下はサンプルコードです
実際のコード..
クラス宣言 (Public Class Consumer..) にブレークポイントを設定すると、次の行にステップ オーバーすると NPE が発生します。コード内のコメント行を削除すると、コメント解除された最初の行で失敗します。
Java 1.6 と IntelliJ IDE を使用しています。IDE構成と関係があるのだろうか。
TestNG ではスタック トレースすら取得できませんが、JUnit では以下のように表示されます。
java - JMockit を使用して、モックされたコンストラクターから実際のインスタンスを返す
私は次の質問を見てきましたが、それは私のものと同じではありません:
jMockit:モック化されたオブジェクトへのコンストラクター呼び出しを期待する方法は?
この質問は似ていますが、答えは私には役に立ちません:
JMockitでDateクラスのデフォルトコンストラクタをモックする方法は?
私がやろうとしているのは、特に引数java.util.zip.ZipFile
を持つものへのコンストラクター呼び出しをモックすることです。java.io.File
コンストラクターが別のインスタンスを返すようにしたいのですが、引数ZipFile
のみを取るコンストラクターでインスタンス化します。String
ZipFile
このコンストラクターの呼び出しはテスト対象のメソッド内で行われるため、必要なパラメーターを挿入することはできません。
たとえば、コードは次のようになります。
私が最初に考えたのは、静的部分モッキングで次のことを行うことでした。
ただし、チュートリアルの次の行で示されているように、これは機能しません。constructors have void return type, so it makes no sense to record return values for them
2番目に考えたのは、次のことを試すことでした。
ただし、ファイルを初期化しようとすると、次のメッセージがスローされます。
私の 3 番目の考えは、@MockClass
以下のように a を使用することでした。
しかし、これは、テストクラスの別の部分の構成ファイルをロードする、私が持っている他のいくつかのモックをホースします。言うまでもなく、テスト ケースごとに異なる zip ファイルが必要です。
実行するすべてをモックできると思いますZipFile
が、多くの場所で呼び出され、出力をモックする必要があるなど、これはすぐに大きな苦痛になります。これをアクセス可能にしようとするリファクタリングは厄介です。を使用するコードはコードのZipFile
内部にあり、パブリック メソッドは実際には気にしません。
JMockit がこれを許可する (コンストラクターが呼び出されたときにオブジェクトの特定のインスタンスを与える) 方法があると感じていますが、それを理解することはできません。誰にもアイデアはありますか?
編集: @Rogerio が提案した方法を試しましたが、新しいエラーが発生しました。これが私のセットアップです:
しかし、私は次のスタックトレースを取得します:
ここで、61行目はnew NonStrictExpectations() {
行です。
「このオブジェクトを嘲笑する代わりに、同じタイプのこの別のオブジェクトを置き換えてください」と本当に言いたいです。多分私はそれをうまく表現していませんでした。
EDIT2: バージョン番号を含める必要があると考えました: Using Eclipse 3.6.1 Java 1.6.0_26 JMockit 0.999.10
java - JMockit & 複数のローカルメソッド
x()
メソッド、y()
およびを持つクラス MyClass があるとしましょうz()
。x()
呼び出しy()
、y()
呼び出しとしましょうz()
。
したがってx()
、両方y()
をテストしz()
て呼び出されるたびに。MyClass の依存関係をモックする場合x()
、y()
と内の依存関係の動作をモックする必要がありz()
ます。
したがって、メソッドのテストが である場合、各テスト メソッドで依存関係に対する期待を繰り返す必要がありx()
ます。最終的に、内部で何が起こるかを期待するコードがいくつかあり、3 つのテスト メソッドで繰り返されます。これを回避する解決策はありますか?testXWhen1()
testXWhen2()
testXWhen3()
y()
z()
x()
私のアイデアの 1 つは、実際のメソッドをテストしようとすることでしたが、モックy()
とz()
. その場合、私のインスタンスのMyClass
一部はモックであり、一部は本物である必要がありますMyClass
。出来ますか?
もう 1 つの解決策は、 での期待について厳密にすることでしたが、でx()
何が起こるかについてではなく... の代わりにそれを行うことができると思いますが、それは私のお気に入りの解決策ではありません。y()
z()
@NonStrict
@Mocked
jmockit - JMockitでは、一連の呼び出しの時間を指定する方法は?
私は次のようなものを持っています:
「times =」指定を使用する方法はありますか? 何かのようなもの:
期待値にループがある/可能性がありますが、単体テストで循環的複雑さが 1 を超えるのは本当に嫌いです。
厳密な期待値を使用し続けたいことに注意してください。
java - JunitでのJmockitNullPointerException
別のプログラマーがEclipse-indigoでJUnitを使用して作成したテストを実行しようとしています。彼はそれが機能することを確認していますが、Jmockitを試してみると失敗し、まだ解決策が見つかりません。
クラスパスのjmockit.jarを変更しようとしましたが、機能しません。この問題について何か考えがありますか?
編集:ターミナルで「anttest」を使用しても問題はありませんが、IDEで「runas> JUnit test」をクリックすると、このエラーが発生します。
jmockit - JMockitを使用して春のjdbcTemplateをモックする方法はありますか?
データベースへの呼び出しがないように、Spring の jdbcTemplate をモックする必要があるアプリケーションで、DAO 用の JMockit を使用して単体テスト ケースを作成しています。DAOのモックについて話している他の投稿/例を見たことがありますが、jdbcTemplateのモックについて話しているものは見つかりませんでした。それをあざける方法はありますか?もしあれば、どこから始めればよいですか?
java - JMockitを使用して同じモックインターフェイスを持つ2つのオブジェクトから返される同じ値
実際の問題を単純化するために、単純なテストクラスを作成しました。
パブリッククラスBidonTest{
}
以下、テスト結果:
私の最初の質問は、なぜibidon2が「coco」を返すのかということです。(アイデアがほとんどない場合でも、ここにいる誰かがJMockitの専門家である可能性があります:D)2番目の質問は、「ismael et jordan」を返すように変更するにはどうすればよいですか?
jmockit - Maven 2.2 で JMockit 0.999.11 を使用するとエラーが発生するが、junit および testng オプションで動作する
jmockit の Maven テストまたは Maven Surefire テストを実行しようとすると、以下のエラーが発生します。しかし、junit または testng を実行すると、正常に動作します。
java.lang.RuntimeException: java.io.IOException: Unable to enqueue operation, pre-6.0 jvm.dll? mockit.internal.startup.JDK6AgentLoader.loadAgentAndDetachFromThisVM(JDK6AgentLoader.java: 111) で org.apache.maven.surefire.testng.TestNGDirectoryTestSuite.execute(TestNGDirectoryTestSuite.java:111) で 原因: java.io.IOException: エンキューできません操作、6.0 より前の jvm.dll? sun.tools.attach.WindowsVirtualMachine.enqueue(Native Method)で sun.tools.attach.WindowsVirtualMachine.execute(WindowsVirtualMachine.java: 77)で sun.tools.attach.HotSpotVirtualMachine.loadAgentLibrary(HotSpotVirtualMachine.java: 53)で
上記は、maven 2.2 で実行したときに発生するエラーです。
私が使用している環境: Maven: 2.2.1 JMockit: 0.999.11 pom に以下を追加:
Java: IBM Java 1.6 SR4
しかし、javaagent パスを junit または testng ランタイム vm args に追加すると、正常に動作します。しかし、maven test vm args にも追加しようとしましたが、機能しませんでした。
これについて私を助けてください。
前もって感謝します。-スリナート