サブクラスで @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 メソッドの順序は正しいです。さらに、決定論的であるように見えます-問題があるのは常に同じテストクラスです。
ありがとう!