問題タブ [junit-runner]

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.

0 投票する
3 に答える
1721 参照

junit - JUnit - Collection of array エラーを返す必要があります

EmployeeDetails.class のリストを JUnit パラメータ化クラスに渡す方法。

Parameters メソッドの作成を手伝ってください

// これにより、「employeeList は配列のコレクションを返す必要があります」のようなエラーがスローされます。

上記の EmployeeDetails クラスは一例です。クラスオブジェクトのリストを送信する同様のクラスに使用する必要があります。

0 投票する
0 に答える
1920 参照

unit-testing - テスト ケース間ではなく、テスト クラス間で呼び出すことができる junit リスナーを追加できますか?

単体テストがクラスの静的状態を変更し、Fooその後クリーンアップしないという問題があります。これは、単体テストが単独で実行された場合は成功する可能性がありますが、他の単体テストがその前に実行されると失敗する可能性があることを意味します。これは、状態が変化したためです。

の静的状態を変更し、必要なクリーンアップを追加するテストを探してコードを調べてきましたが、Foo別のアイデアがありました: junit テストリスナーを使用して、Foo各テストの実行後の静的状態を調べてみませんか? 、Foo変更された状態のままである場合は失敗しますか? 次に、ビルドごとにいたずらなテストのリストを自動的に取得し、将来同様の問題を特定できます。

そこで、junit を実装し、RunListenermypom.xmlにリスナーを追加するように変更してmaven-surefire-plugin、テスト ケースごとにリスナーが実行されることを確認しました。

testFinished()簡単な解決策は、メソッドをオーバーライドしRunListenerて静的状態を確認することです。

これは、次の形式のテストで機能します。

}

各テスト ケースの後、@Afterメソッドが呼び出され、状態がクリーンアップされます。次に、testFinished()junit 実行リスナーのメソッドが呼び出され、状態がリセットされたことを確認します。メソッドを削除する@Afterと、予想どおり、実行リスナーでエラーが発生します。

ここでの問題はtestFinished、junit 実行リスナーのメソッドが単体テストのメソッドの後@BeforeClassと前に呼び出されることです。@AfterClass単体テストで Foo の状態が変更され、メソッドで@BeforeClassクリーンアップされる場合、リスナーのメソッドは変更された状態を認識し、誤ってエラーを発生させます。@AfterClasstestFinished

ここでtestFinished()、実行リスナーのメソッドは、呼び出された後testCase1()で呼び出さtestCase2()れますが、メソッドが呼び出される前@AfterClassであるため、状態はFoo変更されず、実行リスナーはエラーを発生させます。それは正しい振る舞いではありません。

一般に、2 つの単体テストTestATestB、および junit run listenerListenerの場合、呼び出しシーケンスは次のようになります。

  • Listener.testRunStarted()
  • TestA.@BeforeClass
  • Listener.testStarted("TestA.testCase1)
  • TestA.@Before
  • TestA.testCase1()
  • TestA.@After
  • Listener.testFinished(TestA.testCase1)
  • Listener.testStarted("TestA.testCase2)
  • TestA.@Before
  • TestA.testCase2()
  • TestA.@After
  • Listener.testFinished(TestA.testCase2)
  • TestA.@AfterClass
  • TestB.@BeforeClass
  • Listener.testStarted("TestB.testCase1)
  • TestB.@Before
  • TestB.testCase1()
  • TestB.@After
  • Listener.testFinished(TestB.testCase1)
  • TestB.@AfterClass
  • Listener.testRunFinished()

私が望むのは、メソッドが単体テストで呼び出された後、次の単体テストでメソッドが呼び出される@AfterClass前に、変更された状態のチェックを実行することです。@BeforeClassこのようにして、単体テスト (個々のテスト ケースではない場合) が必要なクリーンアップを実行し、テストのセマンティクスを尊重することを保証できます。

RunListenerしかし、junitを使用してこれを実行し、maven Surefire プラグインを使用してテストを呼び出す方法がわかりません。

ここに解決策はありますか?

編集:現在存在するすべてのテストと将来追加されるすべてのテストに追加する必要があるため、状態をチェックする既存のテストにjunitクラスルールを追加することはオプションではありません。可能であれば、違反を自動的に発見するものが欲しいです。

編集: ここでの根本的な問題は、maven モジュールの各単体テストが同じ JVM で実行されることです。各単体テストを独自の JVM で (surefire の分岐オプションを設定して) 実行しようとしましたが、テストの実行に時間がかかりすぎました。そのため、複数の単体テスト用に単一の JVM を使用しています。

編集: もちろん、静的メソッドを使用することはそもそも悪い設計であり、状態を挿入するためのリファクタリングが推奨されますが、1,000,000 行以上のレガシー コード ベースをリファクタリングすることは、この段階ではオプションではありません。

0 投票する
0 に答える
519 参照

junit-runner - これら 2 つの RunWith ランナーをマージする方法は?

どちらも BlockJUnit4ClassRunner から継承された 2 つのランナーを作成しました。1 つは、条件に基づいていくつかのテストをフィルタリングすることです。もう 1 つは、複数のメソッドを同時にテストすることです。テストが条件に基づいて同時に実行されるように、これらの両方のランナーを適用したいと考えています。

問題は、 jUnit の複数の RunWith ステートメント によると、複数の @RunWith を同じテストに注釈付けできないことです。

私の質問は、これら 2 つのランナーは両方とも同じ基本クラス BlockJUnit4ClassRunner から継承されているため、これら 2 つのランナーを 1 つに結合して、RunWith このランナーで、条件に基づいて並行してテスト メソッドを実行できるようにすることはできますか? そして、それを行う方法は?

作成したランナーは次の 2 つです。

1) このランナーは、FunctionalTestFilter で定義されたいくつかの条件に基づいてテスト メソッドを実行します。

2) このランナーは、マルチスレッドを使用してテスト メソッドを同時に実行します。

0 投票する
1 に答える
2278 参照

java - JUnit java.lang.AssertionError: 未実装

JUnit でテストされた Java クラスがありますが、java.lang.AssertionError: Unimplemented が発生します。

これらすべてのメソッドについて、エラーが見つかりません

例:
java.lang.AssertionError: 実装されていない demo.model.KiwiantraagstellerTest.testRemoveKiwikinder(KiwiantraagstellerTest.java:262)

java.lang.AssertionError: 実装
されていない demo.model.KiwiantraagstellerTest.testSetAnschrift(KiwiantraagstellerTest.java:30)

... 私を助けてください

私のクラス:

JUnit を使用したテスト: