2

@EntityJPAクラスの単体テスト生成を自動化するライブラリを作成しています。要するに、ユーザーはフィールド -> 値のペアのマルチマップを提供し、私のライブラリはそれらのテストを生成します。

テストデータの例:

lastName -> some name, some other name
firstName -> some first name, some other first name

テストを含むクラスがあるとします。

public class PersonTest
{
    @Test
    public void personNotValidNullLastname() {
        // ...
    }

    @Test
    public void personNotValidTooLongLastname() {
        // ...
    }

    @Test
    public void personNotValidDateofbirth() {
        // ...
    }

    @Test
    public void personValidAddressType() {
       // ...
    }
    // ...
}

これらのテストを実行すると、TestNG コンソールから適切な出力が得られます。

PASSED: personNotValidDateofbirth
PASSED: personNotValidNullLastname
PASSED: personNotValidTooLongLastname
PASSED: personValidAddressType

ここで、その場でいくつかのテストを作成したいと思います。@Factory次のようなメソッドで注釈を使用すると:

@Factory
public Object[] generateTests() {
    // ...
}

このファクトリは、カスタム クラスのインスタンスを作成します。

public class EntityFieldTest
{
    // ...

    @Test
    public void doTest()
    {
        testMethod.run(VALIDATOR, entityClass, field, value);
    }
}

// Note that testMethod is an anonymous function parametrized elsewhere

生成されたすべてのテストを実行しますが、出力はあまり意味がありません。

PASSED: doTest
PASSED: doTest
PASSED: doTest
PASSED: doTest

テストメソッドを実行して、のような詳細な結果を得るにはどうすればよいPersonTestですか?

4

4 に答える 4

3

実装EntityFieldTestorg.testng.ITestてオーバーライドしますgetTestName()EntityFieldTestファクトリ内のインスタンスを作成していると述べたのでEntityFieldTest、そのテストの名前を表す文字列を受け取るコンストラクターを提供します。次に、その値を に返しますgetTestName()

于 2013-01-28T15:40:03.863 に答える
0

カスタム ロガー ( http://testng.org/doc/documentation-main.html#logging ) を作成して、好きなレポートを生成できます。

于 2013-01-28T15:41:17.223 に答える
0

代わりにバリデータクラスを使用する必要があるようです。コア テストが作成されていることを確認するのは良い考えですが、スタブを提供する以上のエネルギーは、実際に属性の状態を検証するクラスに投入することをお勧めします。

于 2013-01-28T16:02:51.207 に答える
0

DataProvidersを確認しましたか?

テストケースのデータを提供するオプションが提供されます。ファイルからテスト ケースの入力を読み取って、テスト関数に渡すこともできます。各 @Test メソッドには @Dataprovider(name=.., [class=..] で注釈を付ける必要があります

したがって、 personValidAddressType は次のようになります

@Test(dataProvider = "validAddressType", dataProviderClass = TestCaseData.class)
public void personValidAddressType(TestCase testCase) {...}

テストケースデータでは、

@DataProvider(name = "validAddressType")
public static Iterator<Object[]> getTestCases() {
    //returns your test case
}

言及されたリンクの例は、同様のシナリオで役に立ちました。イテレータの代わりに Object[][] を返すデータプロバイダを持つこともできます

于 2013-01-28T23:40:40.217 に答える