java - 在 Jenkins 上构建时,单元测试没有重置上下文?

标签 java unit-testing maven junit jenkins

我有一个 Maven 项目,可以在本地正常运行所有单元测试,但是当同一项目在我们的 Jenkins 服务器上运行时,某些单元测试或其他测试偶尔会在完全不相关的更改后开始失败。这就像它以随机顺序运行测试,并且在每次测试之前不重置内存中的 HSQLDB 数据库,因此一个随机选择的测试的输出将被输入到下一个测试的输入中。我认为测试数据的重置是自动 JUnit 过程的一部分。

有人知道是什么原因造成的,更重要的是,如何治愈它?

该项目的 Jenkins 设置是:Jenkins 版本。 1.534、Maven 3.1.1、Java 1.7

当前失败的测试设置如下:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations={"classpath:test-context.xml"})
public class MyAppStatusServiceTest {

    @Autowired
    MyAppStatusService service;

    @Test
    public void createTest() {
        MyAppStatus test = new MyAppStatus();
        test.setStatusCode('Y');
        test.setStatusDefinition("Test Data");
        test = service.save(test);
        assertEquals("Test Data",test.getStatusDefinition());
    }

    @Test
    public void readTest() {
        MyAppStatus test = service.findOne(ApplicationStatus.PENDING.getCode() );
        assertEquals("Pending",test.getStatusDefinition());
    }


    @Test
    public void updateTest() {
        MyAppStatus test = service.findOne(ApplicationStatus.PENDING.getCode());
        test.setStatusDefinition("New Value");
        test = service.save(test);

        MyAppStatus readme = service.findOne(ApplicationStatus.PENDING.getCode());
        assertEquals("New Value", StringUtils.trim(readme.getStatusDefinition()));
    }
}

返回的错误是第二次测试失败,如下:

org.junit.ComparisonFailure: expected:<[Pending]> but was:<[New Value]>

所以看起来底部测试正在运行,数据没有重置,然后中间测试正在运行(并且失败)。我无法在本地复制这种行为,所以有点令人沮丧。

最佳答案

Junit 不会重置您在测试中使用的任何测试数据。 test 顺序始终是随机的,即使在本地环境中,您的测试也可能会失败,这与 jenkins 无关。

使用@Before带注释的方法将记录插入数据库并使用 @After用于从数据库中删除记录的注释。

BeforeAfter 注释方法将在每次测试执行之前和之后调用。

e.g

@Before
public void onceBeforeEachTest(){
// Insert test data records.
}


@After
public void onceAfterEachTest(){
// Delete test data records.
}

关于java - 在 Jenkins 上构建时,单元测试没有重置上下文?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23915658/

相关文章:

java - 在没有框架的情况下创建模拟对象

java - 关闭操作Java

unit-testing - 运行单元测试时出现奇怪的 .net 4.0 异常

ruby-on-rails - 如何断言 Rails 方法不会抛出 NoMethodError

excel - 使用 pandas 读取 excel 文件的单元测试

java - 如何使用 Maven 编写文件?

java - 当我们使用一对多关系的两侧和一侧时

java - 如何在 AWT/SWING 中的同一文本字段中输入两个数字

java - 在可视化代码中使用 Maven 导入电报机器人依赖项?

java - Spring Boot应用程序无法启动?