2

サブクラスで @Before メソッドを実行する前に、スーパークラスで @Before メソッドを実行する JUnit に慣れています。ただし、別の Groovy クラスから継承する Groovy テスト クラスがあり、両方に @Before メソッドが含まれています。私が抱えている問題は、テストクラスの @Before メソッドがそのスーパークラスのメソッドの前に実行されており、初期化されていない変数から NPE を取得していることです (スーパークラスがそれを処理することになっています)。

スーパークラスは次のようなものです。

import groovyx.net.http.RESTClient
import org.junit.Before

abstract class BaseTestClass {
    def client

    @Before
    void setUp() {
        client = new RESTClient()
    }
}

サブクラスは次のようなものです。

import org.junit.Before

class TestClass extends BaseTestClass {

    @Before
    void setUp() {
        client.post(path: '/entity', body: '{"id":"test"}')
    }

    ...
}

これは単純化されたバージョンですがjava.lang.NullPointerException: Cannot invoke method post() on null object、サブクラスの setUp() メソッドでエラーが発生します。この動作を引き起こす可能性のあるアイデアはありますか? すべてのドキュメントは、逆であるべきだと言っていますが、私はこれまでに別のことを経験したことはありません.

maven-failsafe-plugin、junit-4.10、および jdk-1.6.0_31 を使用して実行しています。興味深いことに、同じ場所 (同じパッケージ、同じプロジェクト、同じディレクトリ) に、この問題の影響を受けない他の Groovy テスト クラスがあります。@Before メソッドの順序は正しいです。さらに、決定論的であるように見えます-問題があるのは常に同じテストクラスです。

ありがとう!

4

1 に答える 1

8

両方の @Before メソッドに名前を付けましsetUp()た。子のsetUp()メソッドは親のメソッドをオーバーライドします。したがって、この行client = new RESTClient()は呼び出されません。

別の名前を選んでください。

于 2012-07-03T18:50:26.463 に答える