JUnit 基础测试自动设置

Posted

技术标签:

【中文标题】JUnit 基础测试自动设置【英文标题】:JUnit base test auto setUp 【发布时间】:2013-01-02 14:31:35 【问题描述】:

我想编写一个BaseTest 类,它只是为所有扩展子类提供“通用setUp() 方法”:

public class BaseTest 
    @Before
    public void setUp() 
        System.out.println("setUp() was called!");

        // Doesn't really matter what this is doing...
        EnvironmentConfigurator.configureEnvForTesting();
    

然后:

public class WidgetTest extends BaseTest 
    @Test
    public void test1() 
        fail();
    

    @Test
    public void test2() 
        fail();
    

因此,理想情况下,每次执行由@Test 注释的子类方法时,JUnit 都会首先调用BaseTest#setUp() 方法,该方法可以执行任何操作(并不重要)。也许它将一些模拟状态重置为初始值,以便每个测试都可以从“干净的状态”开始,等等。同样,这并不重要。

不幸的是,当我运行这段代码时,我只看到setUp() was called! 打印到屏幕一次,所以很明显BaseTest 并没有按照我想要的方式“包装”我的@Test 方法。有什么办法可以做到这一点?提前致谢!

【问题讨论】:

【参考方案1】:

我刚刚运行了这个,两个测试方法都被调用了,两次 setUp 都被调用了。

如果您在派生类中也有 @Before 注释方法,那么您需要将基类设置方法命名为不同的名称,例如setUpBase() 因为如果方法名称相同,则只调用派生类中的 @Before 注释方法,因为它会覆盖基类中的方法。

【讨论】:

感谢@Bedwyr Humphreys (+1) - 我将 fail() 语句更改为分号(强制测试方法通过),是的,父 setUp() 方法被调用了两次。因此,必须有一些关于使用此设置与失败的测试用例相结合的方法,导致setUp() 方法只被调用一次。再次感谢。 我用 fail() (在 Eclipse 中)运行它,它仍然被调用了两次 奇怪...好吧没关系,删除fail()s 工作,所以我很高兴去。再次感谢。 呵呵。我太愚蠢了 :) 我也使用了相同的方法名称,我想知道为什么它没有被调用。谢谢。 +1

以上是关于JUnit 基础测试自动设置的主要内容,如果未能解决你的问题,请参考以下文章

我在Eclipse中使用Java建立了一个简单的自动化框架,但是无法通过Junit运行Cucumber测试

JUnit4 中静态内部测试类的嵌套测试设置

使用自动生成的键为数据库项创建 JUnit 测试

JUnit4、Spring、Hibernate 测试上下文设置

使用 Junit 5 和 Micronaut 设置测试 MongoDBContainer

如何推迟调用@PostConstruct,直到jUnit设置测试上下文