10

.jarライブラリとして使用することを目的とした に含まれる JUnit テストがいくつかあります。ライブラリには、ライブラリが別のプロジェクトで使用されるたびに実行する必要があるいくつかのテストが含まれています。

ただし、ライブラリを使用して新しいプロジェクトを作成し、Eclipse で JUnit を実行すると、依存関係のテストが.jar実行されないか、JUnit テスト ランナーによって検出されません。メッセージが表示されます:

No tests found with test runner 'JUnit 4'.

.jarメイン プロジェクトに含まれている可能性のあるテストと一緒にテストが実行されるように、依存関係を構成する方法はありますか?

基本的に、依存関係 .jar がテストを、それが使用されているプロジェクトに「エクスポート」することを望みます。

依存関係の管理には、Eclipse Juno、JUnit 4.10、および Maven を使用しています。

編集:

このライブラリのポイントは、それを使用するプロジェクトのテストを支援できるようにすることです。つまり、いくつかの特殊なテストを実行します。これが、ライブラリ .jar をインポートして、追加のテストをインポート プロジェクトに提供できるようにしたい理由です。

4

5 に答える 5

5

MavenSurefireを試すことができます。

場合によっては、さまざまな依存関係の構成で実行される一連のテストがあると便利です。これを実現する1つの方法は、単体テストを含み、テストjarを生成する単一のプロジェクトを作成することです。次に、いくつかのテスト構成プロジェクトが単体テストを使用し、それらを異なる依存関係セットで実行する可能性があります。問題は、依存関係jarでテストを実行する簡単な方法がないことです。Surefireプラグインには、依存関係jarに含まれるすべてまたは一連の単体テストを実行できるようにする構成が必要です。

これは次のように実行できます(JUnit 3):

テストjarに静的suite()メソッドを持つクラスが含まれていることを確認します

import junit.framework.Test;
import junit.framework.TestSuite;

public class AllTests {    
    public static Test suite() 
    { 
        TestSuite suite = new TestSuite( "All Tests"); 
        suite.addTestSuite(TestOne.class); 
        suite.addTestSuite(TestTwo.class); 
        return suite; 
    }    
}

次に、test-jar依存関係を使用するプロジェクトで、TestCaseを作成します。

package org.melati.example.contacts;
import org.melati.poem.AllExportedTests;
import junit.framework.Test;
import junit.framework.TestCase;

public class PoemTest extends TestCase {    
    public static Test suite() 
    { 
        return AllExportedTests.suite(); 
    }
}

これでテストが見つかります。

于 2012-09-06T10:21:37.440 に答える
2

ユニットテスト(@Test注釈付きメソッド)のライブラリを作成するのは悪い考えだと思います。ただし、再利用可能なテストコンポーネントのライブラリを作成することは良いことです。これはいくつかのオープンソースプロジェクトで行われており、どのように機能するかを確認できます。

  1. 1つのMavenモジュールは、ディレクトリからテストコンポーネント(「モック」と呼びます)をエクスポートしますsrc/mock/java。エクスポートされたアーティファクトには-mock分類子があります。rexsl / pom.xmlを参照してください(強調表示された行に注意してください)。

  2. モックアーティファクトは、通常のアーティファクトとともにMaven Centralにデプロイされています:http://repo1.maven.org/maven2/com/rexsl/rexsl-core/0.3.8/(ファイルに注意してください...-mock.jar

  3. そのモックを必要とするモジュールは、通常のアーティファクトとしてそれらを含めることができます。たとえば、rexsl-core / pom.xml(強調表示された行を参照):

  4. 次に、単体テストで、モックの通常のビルダーのように、そのモックライブラリのクラスを使用します。例:BulkHttpFeederTest

このようにして、テストアーティファクトをエレガントな方法で再利用可能にすることができます。それが役に立てば幸い。

于 2012-09-10T15:16:16.280 に答える
1

これが望ましいかどうかはわかりません。一方で、jar を使用する場合、その動作は外部コンテキスト (クラスパス内の他のライブラリなど) の影響を受ける可能性があります。jar の内部から、このコンテキストを分析し、それに応じてテストを調整する簡単な方法はありません。一方、ライブラリを作成してコンパイルする場合は、jar としてパッケージ化する前にテストする必要があります。テストを含めたくない場合もあります。

テストを再度実行することが本当に重要である場合は、jar を変更せずにテストが失敗する可能性があることに興味があります。ただし、その場合は、テストランナーを拡張することをお勧めします。私の知る限り、反射を使用しています。jar をクラスローダーにロードして、すべてのクラスを簡単に調べることができます。リフレクションによって、テスト クラスを識別し、テストスイートを組み立てることができます。例として、テストランナーを調べることができます。それでも、このプロセスは外部から開始する必要があります。たとえば、クライアント プロジェクトのテスト クラスの 1 つから開始する必要があります。ここで、QATest のアプローチが役立つかもしれません: クライアントがオーバーライドされた API を使用している場合、オーバーライドされたバージョンのテストスイートまたはテストランナーを提供することで、これを自動化できます。

このかなりコストのかかるアプローチがあなたのシナリオに適用できるかどうか教えてください。コード例を提供できます。

于 2012-09-05T04:41:47.670 に答える
1

@ミケラ、

これがあなたを助けるかもしれないと思います。Testcase クラスをプロジェクト内の Java クラスの 1 つに拡張するだけで、その特定のクラスを実行して JUnit テストとして実行できます。

于 2012-09-04T04:57:37.510 に答える
0

jar のユーザーが jar 内でテスト ケースを実行する必要があるのはなぜですか !!! jar がパッケージ化されて配信されると、単体テストが正常に実行されたことを意味します。通常、jar 自体は別のプロジェクトとして、またはモジュールの 1 つとして扱う必要があります。どちらの場合も、配信前に単体テスト ケースが実行されます。

于 2012-09-10T09:09:39.757 に答える