我最近使用PHPUnit参与了一些TDD.我必须测试一个数据库驱动的应用程序,并阅读DbUnit扩展,我计划在未来几周内研究和实施.
然而,我自己也遇到了这个人的演讲 - 塞巴斯蒂安·贝格曼 - 他有一张标题为"如果可以的话,避免对MySQL进行测试"的幻灯片,这对我的逃避产生了一些怀疑.
有人可以解释我不应该针对MySQL进行测试的原因吗?
谢谢
我正在使用POI HSSF来读取excel数据,我正在使用JUnit来检查数据库proc RefCursor的数据.
Junit测试失败,因为来自例如100的Refcursor的数值数据与excel表100中的数据进行比较,但它失败,因为POI将其读取为100.0.
InputStream fileInputStream = Testdb.class.getClassLoader().getResourceAsStream(fileName);
//retrieve number of columns and rows
int numRows=0, numCols=0, i, j, minColIndex=0, maxColIndex=0;
POIFSFileSystem fsFileSystem = new POIFSFileSystem(fileInputStream);
HSSFWorkbook workBook = new HSSFWorkbook(fsFileSystem);
HSSFSheet hssfSheet = workBook.getSheetAt(0);
Iterator rowIterator = hssfSheet.rowIterator();
while (rowIterator.hasNext())
{
numRows++;
HSSFRow hssfRow = (HSSFRow) rowIterator.next();
Iterator iterator = hssfRow.cellIterator();
List cellTempList = new ArrayList();
if (numRows == 1)
{
minColIndex = hssfRow.getFirstCellNum();
maxColIndex = hssfRow.getLastCellNum();
numCols = maxColIndex;
}
for(int colIndex = minColIndex; colIndex < maxColIndex; colIndex++) …Run Code Online (Sandbox Code Playgroud) 我希望在Java + DBUnit /中的每次测试后重置数据库AND序列.
我已经看到了这个问题,但没有我正在努力获得的代码解决方案. 如何在DBUnit中使用Oracle序列号?
我正在开发一个使用Spring Data和MongoDB来管理持久层的项目.我遇到了使用我的集成和单元测试应该操作的数据填充一些MongoDB集合的需求.目前我正在使用TestNG(和Spring Test)进行测试.
是否有像DbUnit这样的工具可以与MongoDB一起使用?
基本上我希望这样的工具可以从xml文件中读取文档并在MongoDB集合中编写这样的文档.
或者我错过了一些明显的东西,比如这种需求的最佳实践?
我正在询问并回答这个问题以供将来参考,因为我认为我找到了一个解决DbUnit常见问题的合适解决方案.我希望它能帮到某个人,某个地方.
我正在使用DbUnit 2.5.0和TestNG 6.8.8.我的用例是包含3个实体的数据库的一部分.有一个ServiceUser持有a Administrable和a 的外键UserGroup.
我按照http://city81.blogspot.com/2011/03/testing-jpa-entities-using-dbunit.html上的大部分代码示例进行了操作.
public abstract class AbstractDatabaseTest {
protected EntityManager em; // initialized elsewhere
private IDatabaseConnection connection;
private IDataSet dataset;
@BeforeClass
private void setupDatabaseResource() throws Exception {
// using Hibernate
connection = new DatabaseConnection(((SessionImpl) (em.getDelegate())).connection());
connection.getConfig().setProperty(DatabaseConfig.PROPERTY_DATATYPE_FACTORY, new HsqldbDataTypeFactory());
// full database export
IDataSet fullDataSet = connection.createDataSet();
final String datasetPath = String.format("%s%s", RESOURCE_FOLDER, "Testing.xml");
FlatXmlDataSet.write(fullDataSet, new FileOutputStream(datasetPath));
FlatXmlDataSetBuilder flatXmlDataSetBuilder = new FlatXmlDataSetBuilder();
flatXmlDataSetBuilder.setColumnSensing(true);
dataset = flatXmlDataSetBuilder.build(new …Run Code Online (Sandbox Code Playgroud) 在学习了SpringBoot之后,我想进一步使用(DBUnit和SpringTestDBUnit)来处理集成测试.在整个过程中,一切进展顺利,直到我遇到数据集上布尔数据类型列的设置值.(数据集的内容如下)
<?xml version="1.0" encoding="UTF-8"?>
<dataset>
<Client code="0001" name="client_one" />
<Client code="0002" name="client_two" />
<Client code="0003" name="client_three" active="false" />
<Client code="0004" name="client_four" />
</dataset>
Run Code Online (Sandbox Code Playgroud)
将active="false"属性添加到客户端记录[code = 0003],我的集成测试失败并向我显示此消息Exception processing table name='Client',导致客户端记录[code = 0001]违反了活动非空列约束.
通过在所有记录(有点偏离规范)上提供活动列的值来修复错误(在分支DBUnit_For_Boolean_Columns_Attempt_One上)之后,它起作用了.但是我的目标能够使用上面编写的数据集成功运行集成测试.
问题是如何使用上面的数据集成功进行集成测试?截至目前,我很难实现解决方案,所以我创建了一个Bitbucket存储库供您查看和帮助.
更新日志
2015/02/04变更
我使用 spring 3.0.7、JUnit 4.11 和 DBUnit 2.4.9。我正在尝试在保存未指定多对一关系的实体(设置为空)时测试拖曳异常。这是实体:
<class name="DistributionPoint" table="distribution_point">
<id name="id" unsaved-value="null" type="java.lang.Long">
<column name="id"></column>
<generator class="hilo"></generator>
</id>
<property name="name" type="java.lang.String">
<column name="name" length="255"></column>
</property>
<property name="description" type="java.lang.String">
<column name="description" length="1024"></column>
</property>
<property name="image" type="binary">
<column name="image"></column>
</property>
<many-to-one name="site" class="Site">
<column name="siteId" not-null="true"></column>
</many-to-one>
</class>
Run Code Online (Sandbox Code Playgroud)
我创建了以下测试:
@TransactionConfiguration(defaultRollback=false, transactionManager="transactionManager")
//@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:/spring/mysql-test-context.xml" })
public class MysqlDistributionPointTest extends AbstractDatabaseTest {
Run Code Online (Sandbox Code Playgroud)
AbstractDatabaseTest 扩展了 AbstractTransactionalJUnit4SpringContextTests。
测试方法为:
@Test(expected=org.hibernate.PropertyValueException.class)
public void testSaveWithoutSite() {
// set up DP
DistributionPoint distributionPoint = new DistributionPoint(); …Run Code Online (Sandbox Code Playgroud) @DatabaseSetup使用Spring Test DBUnit 的注释时是否可以设置表模式名称?目前我正在这样使用它:
@DatabaseSetup("user-data.xml")
public class UserMapperTest {
}
Run Code Online (Sandbox Code Playgroud)
user-data.xml:(我也尝试将元素名称设置为 user.system_user 但没有任何运气)
<dataset>
<system_user
...
/>
</dataset>
Run Code Online (Sandbox Code Playgroud)
在这里,我使用名为 user 的模式创建表:
create table "user".system_user (...);
Run Code Online (Sandbox Code Playgroud)
这是我在运行测试时遇到的异常:
org.h2.jdbc.JdbcSQLException: Table "SYSTEM_USER" not found; SQL statement:
delete from SYSTEM_USER [42102-175]
Run Code Online (Sandbox Code Playgroud) 我正在为数据库组件编写一些单元测试。为此,我使用了专用的测试数据库(Postgresql,与生产数据库相同)和 dbUnit。
现在我想创建我整个测试数据库的 XML 转储。我目前使用dbUnit的FAQ 页面中的代码
IDatabaseConnection connection = new DatabaseConnection(conn);
connection.getConfig().setProperty("http://www.dbunit.org/properties/datatypeFactory", new PostgresqlDataTypeFactory());
IDataSet fullDataSet = connection.createDataSet();
FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));
Run Code Online (Sandbox Code Playgroud)
这一切都很好,除了Array类型的列。dbUnit 只是将它们排除在外。我希望通过添加PostgresqlDataTypeFactory来修复它,但这不会改变任何事情。
有人知道如何在 dbUnit 中添加对 postgresql 数组的支持吗?
dbunit ×10
java ×7
junit ×2
postgresql ×2
unit-testing ×2
apache-poi ×1
arrays ×1
hibernate ×1
jpa ×1
mongodb ×1
mysql ×1
oracle ×1
phpunit ×1
spring ×1
spring-test ×1
tdd ×1
testng ×1