繁体   English   中英

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

[英]jdbc update query no working on unit test with derby database and SpringJUnit4ClassRunner

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

测试类很简单,例如:

@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> 

一开始我以为问题与提交问题有关,但是我尝试将autocommit属性的值设置为“ true”,并且还手动调用了testDataSource.getConnection().commit()但是它没有用。 代码和方法运行良好,但测试未更新derby数据库。 在其他测试类中,数据是使用dbUnit预置在同一数据库中的,并且代码可以正常工作。 这个答案在这里给我检查可能出现的问题的总表,我读出和写入到同一架构相同的表。 我想念什么吗?

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

作为我发布的问题的答案 ,我验证了自动提交以及是否正在写入正确的数据库,但没有检查明显的问题: 您无法在没有寄存器的情况下更新表! 查询UPDATE MY_TABLE SET DT_UPDATE_OPERATION = ? 应用于空表,计数查询将始终返回0。我刚刚配置了测试,以使DbUnit从xml文件将状态导入数据库。 抱歉,添麻烦了。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM