問題タブ [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 - ant での javaagent の設定
Ant スクリプトから JUnit テストを実行しようとしています。テストでは JMockit モック フレームワークを使用します。Java 5 では、正しく実行するために javaagent として指定する必要があります。これが私が実行しているスクリプトです:
javaagent を正しく設定していないように感じます。この例外を伴うテスト エラー:
javaagent の設定は正しいですか? そうである場合、他に何がこのエラーを引き起こしている可能性がありますか?
java - JMockitでの半順序メソッド呼び出しの検証
メソッドが半順序に従って呼び出されることを確認する単体テスト(JMockitを使用)を作成しようとしています。特定のユースケースは、特定の操作がトランザクション内で呼び出されるようにすることですが、より一般的には、次のようなものを検証したいと思います。
- メソッド
beginTransaction
が呼び出されます。 - メソッド
operation1
からtoまでoperationN
は、任意の順序で呼び出されます。 - メソッド
endTransaction
が呼び出されます。 - メソッド
someOtherOperation
は、トランザクションの前、最中、または後に呼び出されます。
Expectations and Verifications APIは、この要件を処理できないようです。
私が持っている場合、これ@Mocked BusinessObject bo
で正しいメソッドが(任意の順序で)呼び出されていることを確認できます:
オプションで、FullVerifications
他の副作用がないことを確認するようにします。
順序の制約を確認するには、次のようにします。
しかし、これはケースを処理しませんsomeOtherOperation
。unverifiedInvocations
を置き換えることはできません。これは、呼び出しに全bo.operation1(); bo.operation2()
順序が設定されるためです。ビジネスメソッドの正しい実装では、を呼び出すことができます。bo.operation2(); bo.operation1()
私がそれを作った場合:
someOtherOperation
次に、トランザクションの前にが呼び出されると、「未確認の呼び出しが残っていません」という失敗が発生します。試しbo.someOtherOperation(); minTimes = 0
てもうまくいきません。
したがって、JMockItのExpectations / Verifications APIを使用して、メソッド呼び出しの半順序要件を指定するクリーンな方法はありますか?または、を使用しMockClass
て手動で呼び出しを追跡する必要がありますか?
java - JMockit - 同じ型の 2 つのモック インスタンス
私は JMockit フレームワークを使用しており、型の登録EventBus
を可能にする単純な実装をテストしようとしています。イベントがイベント バス上にある場合、登録されているすべてのハンドラーが通知を受け取ります。イベントは、後続のハンドラーにイベントが通知されない原因となるイベント ハンドラーによって消費される可能性があります。EventHandlers
Event
fired
私のテスト方法は次のようになります。
このコードを実行しようとすると、次の例外が発生します。
例外は行で発生しますが、テストメソッドにパラメーターとして渡されるためtimes = 0
、型をモックする必要があるため、その理由はわかりません。パラメータにorをsecondHandler
追加しても違いはありません。@Mocked
@Injectable
firstHandler
イベントを消費するだけの標準クラスを から作成し、コードをテストすると、すべてが正常に実行されます。しかし、その場合、firstHandler
のメソッドhandleEvent
が呼び出されたことを明示的に確認することはできません。これは、もはやモックされた型ではないためです。
どんな助けでも大歓迎です、ありがとう!
java - JMockit | パラメータに基づいて異なる戻り値を定義しようとしましたが、予期しない結果が得られました
次のようなクラスがあります。
ここで、クラスをモックして、上記の関数をテストするためにjMockitを使用しますDAO
。
これは私のテストクラスがどのように見えるかです:
さて、最初のマスクに関する2番目の期待値getData()
、つまりモックオブジェクトは、期待値の最初の行(処理する行sql1
)を宣言したことがないかのように動作するようです。
の最初の呼び出しgetData()
は、初期化した値の代わりに、空のコレクションを返しますresultToSql1
。2番目の呼び出しはresultToSql2
、期待どおりに戻ります。
次の行にコメントすると:
最初の呼び出しは私が定義したものを返します- resultToSql1
、2番目の呼び出しは空のコレクションを返します。意味あり。
だから、私は何が間違っているのですか?getData()
呼び出しのパラメーターに基づいて、から2つの異なる戻り値を定義するにはどうすればよいですか?
どんな助けでもいただければ幸いです。
ありがとう!
java - スーパークラスがjmockitによって嘲笑されるのを防ぐには?
次のようなクラス階層があるとします。
Car クラスをテストしようとしています。しかし、車もたまたまバスを利用しています。したがって、私のテストでは、Bus をモックしようとしています。私のテストコードは次のようになります。
car.getName()
が null を返すため、アサートは失敗します。
Vehicle、Car、および Bus のコンストラクターに 's を挿入することによりSystem.out.println
、ロードされる「実際の」Vehicle が、new Car(name)
後で の実行時にモックされた Vehicle に置き換えられるのではないかと疑ってい@Mocked Bus bus
ます。
車が構築されたときに「インスタンス化」された実際の車両を保存するjmockitの方法はありますか?
java - モックされたインターフェースが null です
JMockitでDAOをモックしようとしています:
このテストクラスでは:
Expectations ブロックで dao オブジェクトが使用されると、NPE がスローされます。dao の宣言を @Mocked アノテーションが付けられたメンバー変数に移動しようとしましたが、同じことが起こります。また、MyDao の具体的な実装を使用してみましたが、同じことが起こります。
java - モックされたメソッドの副作用をシミュレートする
メソッドのパラメーターに副作用を引き起こすクラスのメソッドがあります。
そして、このクラスがテストされています:
JMockit を使用した私のテスト方法:
unit-testing - JMockit で @Autowired を使用すると、 @Autowired オブジェクトが null になります
この正確な問題を扱う別の SO の質問があることを認識しています ( here )。ただし、私の場合はうまくいきません。
春を使用したMaven(Web /フロントエンド)プロジェクトがあります。pom を介して jmockit を jvm に追加しました。
SUT (省略形) は次のようになります。
FooUtils
ここで、テストでインスタンスをモックアウトしたいと思います。この SO questionで与えられたアドバイスに従って、私は試しました:
残念ながら、unitUnderTest
とfoo
は bothnull
であり、これが発生します。
- 何らかのオブジェクト
new MockUp<...>{}.getMockInstance()
を返すと予想していたので、これはまったく予想外です。
重要な部分を見逃しているだけだと思いますが、どれですか?
java - JMockit と参照渡し。どちらかが間違っているに違いありません (おそらく私です!)
誰かが私が最近戦ってきたこの問題を打破するのを手伝ってくれたら、とても感謝しています. double と Calendar を取り、Calendar の値によって決まる整数を返すメソッドをモックしようとしています。モック定義は次のとおりです。
モックはセットアップされています (toString() を呼び出すと正しいテキストが返されます) が、applyInflation メソッドは上記のループの最後の反復以外のすべてに対してゼロを返します (つまり、月 new GregorianCalendar(2010) を渡すと 2 を返します)。 ,2,1)。
私は、AAA とマークされた行は、私が期待する効果を発揮していないと結論付けました。モックの期待が設定した「月」の内容に影響を与えることなく変更できる「月」の新しいコピーを指すようにポインターを変更しているようには見えません。それか、JMockit が思ったようにモックを記録していないかのどちらかです。
助けてください!どこが間違っているのか教えてください。私の Java の理解に根本的な欠陥があるか、JMockit の実装が「あるべき」方法で動作しないため (私によると :))、ここで何が起こっているのかを知りたいと思います。または、私は、開始の 2 つの夜が発見されていない本当の男子生徒のエラーを犯しました.
ありがとうございました。