gpt4 book ai didi

java - jdbc 更新查询无法使用 derby 数据库和 SpringJUnit4ClassRunner 进行单元测试

转载 作者:行者123 更新时间:2023-11-30 03:09:36 25 4
gpt4 key购买 nike

我在尝试进行单元测试时遇到问题。

测试类很简单,例如:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {"/job-runner-context.xml})
public class AtualizarDataServiceTest {

@Autowired
DataSource testDataSource;

@Autowired
Service service;

@Before
public void setUp() throws DatabaseUnitException, SQLException{
service.setDataSource(testDataSource);
}

@Test
public final void testUpdateDate() throws SQLException {
assertTrue(verifyDate());
service.updateDate();
assertFalse(verifyDate()); //Assert brokes here
}

private boolean verifyDate(){
SimpleJdbcTemplate consultaTemplate = new SimpleJdbcTemplate(testDataSource);
int count = consultaTemplate.queryForInt("SELECT COUNT(*) FROM MY_TABLE");
return count == 0;
}
}

服务:

public class Service {

private DataSource dataSource;

public void updateDate(){
SimpleJdbcTemplate jdbcTemplate = new SimpleJdbcTemplate(getDataSource());
String query = "UPDATE MY_TABLE SET DT_UPDATE_OPERATION = ?";
jdbcTemplate.update(query, new Object[]{new java.sql.Date(Calendar.getInstance().getTime().getTime())});
}

public DataSource getDataSource() {
return dataSource;
}

public void setDataSource(DataSource dataSource) {
this.dataSource = dataSource;
}

}

job-runner-context.xml 重要部分:

<context:annotation-config/>
<context:component-scan base-package="my.package"/>

<bean class="my.package.Service"/>

<bean id="testDataSource" class="com.read.only.MyBasicDataSource" destroy-method="close" lazy-init="true">
<property name="jdbcReference" value="derby" />
</bean>

jdbc 连接属性:

<com:jdbcReference name="derby" type="DATABASE">
<com:credential user="" password="" />
<com:autocommit arg="false" />
<com:databaseConfig driverClassName="org.apache.derby.jdbc.EmbeddedDriver"
url="jdbc:derby:dbderby;create=true" databaseName="ANY" />
</com:jdbcReference>

起初我认为问题与提交问题有关,但我尝试将自动提交属性的值设置为“true”,并手动调用 testDataSource.getConnection().commit() 但它没有不工作。代码和方法工作正常,但测试没有更新 Derby 数据库。在其他测试类中,数据是在同一数据库中使用 dbUnit 预设的,并且代码可以正常工作。这个答案here给出了我检查过的可能问题的一般列表,并且我正在读取和写入相同模式中的相同表。我错过了什么吗?

最佳答案

尝试设置<com:autocommit arg="true" /> .

关于java - jdbc 更新查询无法使用 derby 数据库和 SpringJUnit4ClassRunner 进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33895565/

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