Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/345.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 Spring单元测试未从数据库获取更新的值_Java_Spring_Jdbc_Junit_Spring Jdbc - Fatal编程技术网

Java Spring单元测试未从数据库获取更新的值

Java Spring单元测试未从数据库获取更新的值,java,spring,jdbc,junit,spring-jdbc,Java,Spring,Jdbc,Junit,Spring Jdbc,我使用普通SpringJDBC和dao进行了简单的spring配置。 我已经为dao层添加了一个测试用例,它实现了以下功能。 -获取设置 -测试记录的数量和值 -使用新值更新设置 -测试更新的值 我无法使用更新的断言值,下面是我得到的错误。不知道怎么了 Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.386 sec <<< FAILURE! updateTest(com.sims.service

我使用普通SpringJDBC和dao进行了简单的spring配置。 我已经为dao层添加了一个测试用例,它实现了以下功能。 -获取设置 -测试记录的数量和值 -使用新值更新设置 -测试更新的值

我无法使用更新的断言值,下面是我得到的错误。不知道怎么了

Tests run: 1, Failures: 1, Errors: 0, Skipped: 0, Time elapsed: 1.386 sec <<< FAILURE!
updateTest(com.sims.service.SettingsServiceTests)  Time elapsed: 1.086 sec  <<< FAILURE!
org.junit.ComparisonFailure: expected:<[My Org]> but was:<[New Org1]>
at org.junit.Assert.assertEquals(Assert.java:115)
at org.junit.Assert.assertEquals(Assert.java:144)
at com.abc.service.SettingsServiceTests.updateTest(SettingsServiceTests.java:57)

Spring将在您使用时回滚DB更新:

defaultRollback=true

根据我对“defaultRollback=true”的理解,测试框架将回滚每个测试方法的所有事务。在我的例子中,使用我正在执行的测试方法获取记录(settingsDaoImpl.getSettings()),更新记录(settingsDaoImpl.saveSetting(settings)),然后再次获取记录的值(settingsDaoImpl.getSettings()),我的测试期望在最后一次获取时更新值,但我们仍然获取旧值。任何想法。谢谢你的帮助。顺便说一句,我试过使用“defaultRollback=false”,但是没有用。有人能帮我吗?我做错了什么?我回答,因为我无法评论。我建议您参考以下链接:-我觉得您遇到了某种异常,请在调用数据库查询时放置try-catch块。尝试深入查看堆栈跟踪,您将找到解决方案。
@Repository
public class SettingsDaoImpl extends BaseDao{

private static final class SettingMapper implements RowMapper<Settings> {

    public SettingMapper() {
        super();
    }

    @Override
    public Settings mapRow(final ResultSet rs, final int rowNum) throws SQLException {
        final Settings settings= new Settings();

        settings.setId(rs.getLong("id"));
        settings.setOrgName(rs.getString("org_name"));
        settings.setOrgAddress(rs.getString("org_address"));
        settings.setOrgPhone(rs.getString("org_phone"));
        settings.setLanguage(rs.getString("language"));
        settings.setTimeZone(rs.getString("time_zone"));
        settings.setCountry(rs.getString("country"));
        settings.setCurrencyType(rs.getString("currency"));

        return settings;
    }
}

@Transactional(readOnly = true)
public Settings getSettings(){
    final String sql = "select * from settings";
    final Settings student = new Settings();

    final SqlParameterSource paramSource = new BeanPropertySqlParameterSource(
            student);

    final List<Settings> result = this.getNamedParameterJdbcTemplate().query(
            sql, paramSource, new SettingMapper());

    if (result != null && !result.isEmpty()) {
        return result.get(0);
    }
    return null;
}

@Transactional(readOnly = false)
public Settings saveSetting(Settings settings) {
    Settings tSettings = null;
    if (settings.isNew()) {
        tSettings = insert(settings);
    } else {
        tSettings = update(settings);
    }

    return tSettings;
}


public Settings insert(Settings settings){
    final String sql = "insert into settings (org_name, org_address, org_phone, language, time_zone, country, currency) "
    +" values (:orgName, :orgAddress, :orgPhone, :language, :timeZone, :country, :currency)";
    final GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
    final String[] keyColumnNames = { "id" };

    final SqlParameterSource paramSource = new BeanPropertySqlParameterSource(
            settings);

    final int count = this.getNamedParameterJdbcTemplate().update(sql,
            paramSource, generatedKeyHolder, keyColumnNames);

    settings.setId(generatedKeyHolder.getKey().longValue());
    return settings;
}

public Settings update(final Settings settings) throws DataAccessException {
        final StringBuilder updateClause = new StringBuilder();
        SettingDb.getUpdateSql(updateClause);
        final String sql = "update settings set org_name:=orgName, org_address:= orgAddress, " +
        org_phone:=orgPhone, language:=language, time_zone:=timeZone, country:=country, currency:=currency where id=:id";

        final GeneratedKeyHolder generatedKeyHolder = new GeneratedKeyHolder();
        final String[] keyColumnNames = { "id" };

        final SqlParameterSource paramSource = new BeanPropertySqlParameterSource(
                settings);

        final int count = this.getNamedParameterJdbcTemplate().update(sql,
                paramSource, generatedKeyHolder, keyColumnNames);

        return settings;
}

}
@Transactional(propagation = Propagation.NESTED)
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@ContextConfiguration(locations = {"classpath:spring/applicationContext.xml"})
@RunWith(SpringJUnit4ClassRunner.class)
public class SettingsDAOTests {

@Autowired
private SettingsDaoImpl settingsDaoImpl;

@Test
public void testSettings(){

    Settings settings = settingsDaoImpl.getSettings();
    Assert.assertNotNull(settings);

    String orgName = "New Org";
    String orgAddress = "New Org Ad";
    String phoneNumber = "Ph1";
    String language = "Hindi";
    String timeZone = "GMT";
    String country = "US";
    String currency = "Dollar";

    settings.setCountry(country);
    settings.setOrgAddress(orgAddress);
    settings.setOrgName(orgName);
    settings.setOrgPhone(phoneNumber);
    settings.setLanguage(language);
    settings.setTimeZone(timeZone);
    settings.setCurrencyType(currency);

    settingsDaoImpl.saveSetting(settings);

    Settings settings1 = settingsDaoImpl.getSettings();

    Assert.assertEquals(orgName, settings1.getOrgName());
    Assert.assertEquals(orgAddress, settings1.getOrgAddress());
    Assert.assertEquals(phoneNumber, settings1.getOrgPhone());
    Assert.assertEquals(timeZone, settings1.getTimeZone());
    Assert.assertEquals(country, settings1.getCountry());
    Assert.assertEquals(currency, settings1.getCurrencyType());

    String orgName1 = "New Org1";
    String orgAddress1 = "New Org Ad1";
    String phoneNumber1 = "Ph11";
    String language1 = "Hindi1";
    String timeZone1 = "GMT1";
    String country1 = "US1";
    String currency1 = "Dollar1";

    settings.setCountry(country1);
    settings.setOrgAddress(orgAddress1);
    settings.setOrgName(orgName1);
    settings.setOrgPhone(phoneNumber1);
    settings.setLanguage(language1);
    settings.setTimeZone(timeZone1);
    settings.setCurrencyType(currency1);

    settingsDaoImpl.saveSetting(settings);

    Settings settings2 = settingsDaoImpl.getSettings();

    Assert.assertEquals(orgName, settings2.getOrgName());
    Assert.assertEquals(orgAddress, settings2.getOrgAddress());
    Assert.assertEquals(phoneNumber, settings2.getOrgPhone());
    Assert.assertEquals(timeZone, settings2.getTimeZone());
    Assert.assertEquals(country, settings2.getCountry());
    Assert.assertEquals(currency, settings2.getCurrencyType());
}
}
defaultRollback=true