我习惯于 JUnit 在子类中的 @Before 方法之前在父类(super class)中运行 @Before 方法。但是,我有一个继承自另一个 Groovy 类的 Groovy 测试类,它们都包含 @Before 方法;我遇到的问题是测试类中的@Before 方法在其父类(super class)中的方法之前运行,并且我从未初始化的变量中获取 NPE(父类(super class)应该处理这个问题)。
父类(super class)是这样的:
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 方法的顺序是正确的;此外,它似乎是确定性的 - 它总是有问题的同一个测试类。
谢谢!
最佳答案
您将两个@Before 方法命名为setUp()
。 child 的 setUp()
方法覆盖了 parent 的方法。所以行 client = new RESTClient()
永远不会被调用。
只需选择另一个名称即可。
关于groovy - Groovy 中的 JUnit @Before 方法排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11316755/