spring - 如何使用 Dbunit 测试没有 Hibernate 实体的表的 Dao

标签 spring mocking junit4 dbunit spring-junit

我使用 DbUnit 和数据集为 Dao 编写了一个测试类

这是我的类(class):

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:config/appContext-test.xml" })
@TestExecutionListeners({DependencyInjectionTestExecutionListener.class, DBUnitTestExecutionListener.class })
@DBUnitConfiguration(locations = { "testdata/mso_data.xml" })
public class TestMsoJobsDao{

@Resource
private MsoJobsDao msoJobsDao;

@Test
public void testSaveMsoDataIntoTempTable() throws Exception{
List<Object[]> msoHeadendList = new ArrayList<Object[]>();
Timestamp timestamp1  = Timestamp.valueOf("2015-07-01 08:49:50");
Object[] obj1 = {"TEST_MSO_SERVICE_ID_3","America/Detroit","SL","1",timestamp1,"1",timestamp1};
msoList.add(obj1);
msoJobsDao.saveMsoDataIntoTempTable(msoList);
}
}

数据集是:

<?xml version='1.0' encoding='UTF-8'?>
<dataset>
<mso_temp id="1" mso_service_id="TEST_MSO_SERVICE_ID_3"
timezone="America/Detroit" customer_group="RC" created_by="1" 
created_date="2015-10-05 06:31:59" updated_by="1" 
updated_date="2015-10-05 06:31:59"/>
</dataset>

当我运行测试用例时,我收到 org.dbunit.dataset.NoSuchTableException: mso_temp

我的问题是我不需要任何实体,因为我正在连接到其他数据库并使用PreparedStatement将数据从那里保存到我们的应用程序数据库中的临时表。如果我创建实体类,则测试用例运行良好。

有没有办法让DBUnit考虑实体类不存在的表。

最佳答案

dbUnit不使用实体类,它直接使用JDBC。 dbUnit错误是表不存在,并且dbUnit不创建表。您的应用程序/测试设置从实体类创建表,因此如果没有实体,表就不存在。

对于没有实体的所需表,测试设置必须创建这些表。为了方便起见,您可能只想将实体放入测试类文件夹中。另一种选择是运行 DDL,在运行所有测试之前创建表。

关于spring - 如何使用 Dbunit 测试没有 Hibernate 实体的表的 Dao,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37695618/

相关文章:

java - 如何使注入(inject)的模拟等于 Null?

java - JUnit 中全局变量的值更改为 null

java - 如何提交具有多个不同迭代值的 html 表单帖子?

java - 使用 Spring security 3 仅使用用户名对 REST 用户进行身份验证

unit-testing - 如何设置对特定类型的 Equals 调用覆盖 MoQ 中的 Equals?

java - Mockito 获取所有模拟对象

java - 使用 selenium.open() 打开带参数的 URL

java - Junit 4.x + Hibernate 5.x 与 H2 数据库

java - 如何设置 spring 注入(inject) null 而不是为所有 @Autowired 注释抛出异常?

java - spring - 如何在 Spring XML 中设置 java.util.Locale 列表?