标签: database-testing

如何进行数据库单元测试?

我听说在开发使用数据库的应用程序时,您应该进行数据库单元测试.数据库单元测试的最佳实践是什么?进行数据库单元测试以及如何"正确"执行此操作时,主要关注的是什么?

database unit-testing database-testing

43
推荐指数
4
解决办法
4万
查看次数

如何在Play框架中针对非内存数据库(如MySQL)创建单元测试,并重置为已知状态?

我想创建单元测试,涵盖在Play框架2.1.0中使用关系数据库的代码.这有很多可能性,所有原因都有问题:

测试内存H2数据库

Play框架文档建议在H2内存数据库上运行单元测试,即使用于开发和生产的主数据库使用其他软件(即MySQL):

app = Helpers.fakeApplication(Helpers.inMemoryDatabase());
Run Code Online (Sandbox Code Playgroud)

我的应用程序不使用复杂的RDBMS功能,如存储过程,大多数数据库访问情况是ebean调用,因此它应该兼容MySQL和H2.

然而,在变阵创建表的语句中使用MySQL特定的功能,如指定ENGINE = InnoDB,DEFAULT CHARACTER SET = utf8等我担心我是否会删除这些专有部分CREATE TABLE,MySQL将使用一些默认设置,我无法控制和依赖的版本,所以测试和开发应用程序主MySQL配置必须修改.

任何人都使用这种方法(使evolutions与MySQL和H2兼容)?

其他想法如何处理:

  • MySQL和H2分开演变(不是个好主意)
  • 有些方法让H2忽略了额外的MySQL内容create table(MySQL兼容模式不起作用,它仍然会抱怨default character set).我不知道怎么回事.

在与主数据库相同的数据库驱动程序上进

H2内存数据库的唯一优势是它速度快,并且在与dev/production数据库相同的数据库驱动程序上进行测试可能会更好,因为它更接近真实环境.

如何在Play框架中完成?

尝试:

Map<String, String> settings = new HashMap<String, String>();
settings.put("db.default.url", "jdbc:mysql://localhost/sometestdatabase");
settings.put("db.default.jndiName", "DefaultDS");
app = Helpers.fakeApplication(settings);
Run Code Online (Sandbox Code Playgroud)

看起来像evolutions在这里工作,但在每次测试之前如何最好清理数据库?通过创建截断每个表的自定义代码?如果它会丢弃表格,那么演化会在下一次测试之前再次运行,还是每个play test命令应用一次?或者每次Helpers.fakeApplication()调用一次?

这里的最佳做法是什么?听说dbunit,有没有可能整合它没有太多的痛苦和怪癖?

unit-testing database-testing playframework playframework-2.0

23
推荐指数
2
解决办法
1万
查看次数

存储过程和单元测试

是否有人知道使用SQL对存储过程进行单元测试的框架(或方法),并能够生成合理的报告,告知已经过了什么和失败了什么(类似于CPPUnit)?

regex mysql unit-testing stored-procedures database-testing

18
推荐指数
1
解决办法
2956
查看次数

数据库集成测试

当您使用数据访问层或大多数应用程序堆栈进行集成测试时.如果多个测试在同一个数据库上运行,那么阻止多个测试相互冲突的最佳方法是什么?

tdd integration-testing database-testing

10
推荐指数
2
解决办法
1542
查看次数

MySQL中单元测试的最佳工具

我最近在MySQL中做了很多sproc编程.
我必须说我喜欢它.很多.

然而调试这些婴儿很糟糕.
任何人都知道任何可以在My MySQL调试中获得快乐的工具吗?

mysql unit-testing stored-procedures database-testing

10
推荐指数
2
解决办法
6683
查看次数

PHPUnit:数据库测试的多个数据集

是否可以在PHPUnit上加载多个平面xml数据集来加载大量的灯具?

我们正在编写一个相当复杂的应用程序,并且xml数据集变得非常大,所以我想把它放到2-3 xml中.

以下是测试用例的当前代码:

<?php

class My_TestBase extends Zend_Test_PHPUnit_DatabaseTestCase{ 

/**
 * Zend_Application
 * @var Zend_Application 
 */
protected $_application;

/**
 * Connection
 * 
 * @var Zend_Test_PHPUnit_Db_Connection
 */
private $_connection;

/**
 * Returns the test database connection.
 *
 * @link http://framework.zend.com/wiki/display/ZFPROP/Zend_Test_PHPUnit_Database+-+Benjamin+Eberlei
 * @return PHPUnit_Extensions_Database_DB_IDatabaseConnection
 */
protected function getConnection(){

    if($this->_connection === null){

        $Resources = $this->_application->getOption("resources");

        $conn = Zend_Db::factory($Resources["db"]["adapter"], $Resources["db"]["params"]);          
        $this->_connection = $this->createZendDbConnection($conn, $Resources["db"]["params"]["dbname"]);
    }

    return $this->_connection;
}


/**
 * Returns the test dataset.
 * 
 * @link http://framework.zend.com/wiki/display/ZFPROP/Zend_Test_PHPUnit_Database+-+Benjamin+Eberlei
 * @return PHPUnit_Extensions_Database_DataSet_IDataSet
 */
protected function …
Run Code Online (Sandbox Code Playgroud)

php phpunit database-testing fixtures

7
推荐指数
2
解决办法
2606
查看次数

SQL Server 是否支持内存数据库?

我基本上有一个测试场景,我在那里

  1. 创建数据库
  2. 用一些数据填充它
  3. 执行要测试的业务逻辑,修改数据。我不拥有业务逻辑实现或数据库架构。我必须测试已经存在的东西。
  4. 断言数据已按预期更改
  5. 删除数据库

SQL Server 是否仅支持内存中的类似内容,以便我可以通过删除 #1 和 #5 来加快速度?显然我不需要坚持。

sql-server integration-testing database-testing in-memory-database

7
推荐指数
1
解决办法
3989
查看次数

JUnit 数据库测试和测试排序

我认为数据库测试包含 CRUD 操作是很常见的。所以这些函数会修改数据库,使预期的值发生变化:例如。如果我测试 SELECT 返回 2 行,如果删除测试运行 1st,我可能会失败。类似于插入。JUnit 似乎没有按照定义运行测试,这使得期望值变得困难。

如果我在每次测试时都重新初始化我的数据库,它可能会矫枉过正而且速度很慢。那么我该如何解决这个问题呢?

junit database-testing

5
推荐指数
1
解决办法
1218
查看次数

使用单元测试和测试数据库

我如何使用NUnit和测试数据库来验证我的代码?我理论上会使用模拟(moq),但我的代码更多是维护形状并修复它模式,我没有设置所有的模拟.

我只是创建一个测试项目,然后编写实际连接到我的测试数据库的测试并按照我在应用程序中执行代码吗?然后我用断言检查代码,并确保我要求的是我正确回来的东西?

c# nunit unit-testing database-testing .net-3.5

5
推荐指数
1
解决办法
216
查看次数

Rails数据库,为什么要使用相同的DBMS进行开发和生产?

我似乎无法准确地解释为什么你应该在开发中使用与生产中相同的数据库.我个人喜欢在开发中使用sqlite3(它很轻,易于使用,并且有一个甜蜜的sqlite浏览器GUI工具),然后在生产中使用postgres与heroku.但是,我一直在听听RBates或Michael Hartl或其他人是否应该在两者中使用相同的数据库,为什么会这样呢?

sqlite postgresql ruby-on-rails database-testing

5
推荐指数
1
解决办法
172
查看次数