groovy - Groovy 中的 JUnit @Before 方法排序

标签 groovy junit annotations

我习惯于 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/

相关文章:

android - 迭代执行任务

java - JUnit 5 在 Debug模式下截断堆栈跟踪并使 JVM 崩溃

java - @Primary 与带有 @Qualifier 注释的 @Autowired 之间的区别

annotations - JAX-WS 实现注释与接口(interface)注释

java - 无法在 @Test Junit Selenium Web 驱动程序中使用定位器

java - 如何为字段编写自定义注释,以便为该字段创建自定义 setter ?

groovy - 在geb模块中查找直接子模块

java - 在 Windows 7 上将 JAudiotagger 库添加到 Java

java - Scala 和 Java BigDecimal

java - Mockito GregorianCalendate.getTime() 导致错误