我想知道是否可以保存级联我的实体但仅在我运行测试时?
我希望能够保存级联,但只有在我运行测试时才能保存。为了测试我的dao,如果我可以保存级联实体而不会出现错误,因为子实体尚未保存,这将节省我很多时间。
@Test
public void addGetEntityTests(){
Entity entity1 = ...;
Entity entity2 = ...; //same as entity1
getDao().addEntity(entity1);
assertEquals(entity1, entity2);
谢谢。
答案 0 :(得分:3)
如果不修改实体声明或正在测试的查询,则无法执行您想要实现的目标
并且你不应该这样做,因为在这种情况下,你的测试没有执行与你的实现相同的逻辑,而测试应该检查实现是否按预期工作。
如果您需要在测试开始时获得上下文,则应在课程的@Before
方法之前创建此上下文。
您可以通过自己的服务(如果已测试)或使用DBunit等工具的SQL注入数据库中的数据。
编辑:使用DBunit的示例
您在评论中解释说,设置对象中的所有数据非常繁琐。所以,我想你有多个行和关系来设置创建你的上下文。 在这种情况下,您可以使用DBunit并分两步进行:
我使用了http://dbunit.sourceforge.net/howto.html中我稍微适应的例子。
第一步(生成数据集):
public class DatabaseExportSample
{
public static void main(String[] args) throws Exception {
// database connection
Class driverClass = Class.forName("org.hsqldb.jdbcDriver");
Connection jdbcConnection = DriverManager.getConnection(
"jdbc:hsqldb:sample", "sa", "");
IDatabaseConnection connection = new DatabaseConnection(jdbcConnection);
// partial database export
QueryDataSet partialDataSet = new QueryDataSet(connection);
partialDataSet.addTable("FOO", "SELECT * FROM TABLE WHERE COL='VALUE'");
partialDataSet.addTable("BAR");
FlatXmlDataSet.write(partialDataSet, new FileOutputStream("partial.xml"));
// full database export
IDataSet fullDataSet = connection.createDataSet();
FlatXmlDataSet.write(fullDataSet, new FileOutputStream("full.xml"));
// dependent tables database export: export table X and all tables that
// have a PK which is a FK on X, in the right order for insertion
String[] depTableNames =
TablesDependencyHelper.getAllDependentTables( connection, "X" );
IDataSet depDataset = connection.createDataSet( depTableNames );
FlatXmlDataSet.write(depDataSet, new FileOutputStream("dataset.xml"));
}
}
它将生成一个xml文件(这是一个示例):
<!DOCTYPE dataset SYSTEM "dataset.dtd">
<dataset>
<table name="TEST_TABLE">
<column>COL0</column>
<column>COL1</column>
<column>COL2</column>
<row>
<value>row 0 col 0</value>
<value>row 0 col 1</value>
<value>row 0 col 2</value>
</row>
<row>
<null/>
<value>row 1 col 1</value>
<null/>
</row>
</table>
<table name="SECOND_TABLE">
<column>COLUMN0</column>
<column>COLUMN1</column>
<row>
<value>row 0 col 0</value>
<value>row 0 col 1</value>
</row>
</table>
<table name='EMPTY_TABLE'>
<column>COLUMN0</column>
<column>COLUMN1</column>
</table>
</dataset>
第二步(在测试数据库中注入此数据集):
public class SampleTest {
@Before
protected void setUp() throws Exception
{
super.setUp();
// initialize your database connection here
IDatabaseConnection connection = null;
// ...
// initialize your dataset here
IDataSet dataSet = null;
// ...
try1
{
DatabaseOperation.CLEAN_INSERT.execute(connection, "dataset.xml");
}
finally
{
connection.close();
}
}
...
// when your test method starts you have the required data in your test database
@Test
public void addGetEntityTests(){
Entity entity1 = ...;
getDao().addEntity(entity1);
}
}