gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-02 05:47:27 31 4
gpt4 key购买 nike

我有一个 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/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com