Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/330.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java jdbc更新查询不使用derby数据库和SpringJUnit4ClassRunner进行单元测试_Java_Unit Testing_Jdbc_Derby_Springjunit4classrunner - Fatal编程技术网

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

Java jdbc更新查询不使用derby数据库和SpringJUnit4ClassRunner进行单元测试,java,unit-testing,jdbc,derby,springjunit4classrunner,Java,Unit Testing,Jdbc,Derby,Springjunit4classrunner,我在尝试进行单元测试时遇到问题 测试类很简单,如: @RunWith(SpringJUnit4ClassRunner.class) @ContextConfiguration(locations = {"/job-runner-context.xml}) public class AtualizarDataServiceTest { @Autowired DataSource testDataSource; @Autowired Service service

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

测试类很简单,如:

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

}
<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> 
<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> 
服务:

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

}
<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> 
<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> 
job runner context.xml
重要部分:

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

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

jdbc连接属性:

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

}
<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> 
<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
,代码正常工作。这个答案给出了我检查过的可能问题的一般列表,并且我正在以相同的模式对相同的表进行读写。我遗漏了什么吗?

尝试设置

对于我发布的问题,我验证了自动提交,如果我正在写入正确的数据库,但没有检查明显的:您不能更新没有寄存器的表查询
更新我的表集DT\u UPDATE\u操作=?
应用于空表,计数查询将始终返回0。我刚刚配置了测试,使DbUnit从xml文件向数据库导入状态。抱歉给你添麻烦了