加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 编程开发 > Java > 正文

什么是Java敏捷集成测试DAO – >数据库的好习惯?

发布时间:2020-12-15 08:35:26 所属栏目:Java 来源:网络整理
导读:在 Java环境中针对真实数据库模式的DAO敏捷集成测试的当前良好实践是什么? (通过’敏捷’,我的意思是什么是这个问题的最简化,自动化和简单的解决方案). 我希望实现测试的自动化,证明数据访问层与数据库的实际运行实例无缝集成.我们针对特定供应商数据库测试
在 Java环境中针对真实数据库模式的DAO敏捷集成测试的当前良好实践是什么?

(通过’敏捷’,我的意思是什么是这个问题的最简化,自动化和简单的解决方案).

我希望实现测试的自动化,证明数据访问层与数据库的实际运行实例无缝集成.我们针对特定供应商数据库测试自定义SQL非常重要. I.E.如果我们编写T-SQL,我们想要针对SQL Server进行测试.

单个数据库是专用于所有正在运行的测试,但没有提交?或者每个测试环境都应该有专用数据库?

人们如何处理设置和拆解? DBUnit仍在流行使用吗?春天怎么能帮忙?

解决方法

It is important that we test our custom SQL against specific vendor DBs

因此,您应该为每个供应商数据库创建一套测试

@RunWith(Suite.class)
@Suite.SuiteClasses({})
public class SQLServerTestSuite {

    @BeforeClass
    public static void setUpClass() throws Exception {

    }

    @AfterClass
    public static void tearDownClass() throws Exception {
        // clean database
    }

}

Should a single database be dedicated to all running tests,but with no commits ?

建议您使用rollback命令执行SQL命令,因为如果使用commit,您可以更改当前测试的状态以及更改其他测试的状态.否则,您可以处理意外行为.

对于每个开发人员,建议使用database sandbox.这允许每个用户以他们认为合适的任何方式修改数据库并使用测试来运行应用程序,而不必担心他们的测试与其他用户的测试之间的任何交互

How do people deal with setup and teardown ?

public class PersonTest {

    @Before
    public void setUp() {
        // set up state to run the test
    }

    @After
    public void teardown() {
       // Transaction rollback
    }

}

关于Transaction rollback pattern的好处是它使数据库处于与我们开始测试时完全相同的状态,无论我们对数据库内容做了什么改变

Is DBUnit still in popular use ?

DBUnit用于将数据库表与包含的XML文件进行比较
预期值.您应该记住DBUnit处理手动编码设置.然而,尽管这种方法更加彻底,但开发和维护这些类型的测试非常繁琐.此外,测试不会检测新添加的字段或属性的缺失映射.

How could Spring help ?

Spring内置了对事务回滚模式的支持,并支持命名参数(SqlParameterSource),它允许您在每个供应商数据库的多行和可读xml文件中外部化普通jdbc查询,例如

<?xml version="1.0" encoding="UTF-8"?>
<queries>
    <query name="PERSON_BY_ID">
        <![CDATA[
            select 
                *
            from 
                PERSON
            where
                PERSON.ID = :integerId
        ]]>
    </query>
</queries>

注意查询参数.它遵循JavaScript代码样式,您将参数类型声明为前缀.现在,您可以创建一个用于定义命名查询集的类

public class SQLServerQuery {

    public static final String PERSON_BY_ID = "PERSON_BY_ID";

}

对于动态查询,通常重要的是检测查询逻辑中的错误,例如使用<而不是< =.要捕获这些类型的错误,我们需要编写测试,用测试数据填充数据库,执行查询,并验证它是否返回预期的对象.不幸的是,这些类型的测试对于写入和执行都是耗时的.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读