- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
在我的项目中,我使用了 JDBC、MySQL、Servlets、JSP。为了测试我的 dao,我做了一些单元测试,我正在尝试使用 JUnit 和 Unitils。
我遇到了这个异常:
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method public void com.jean.taxi.daoImpl.ClientDaoImplTest.testListModerators()
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:190)
at org.unitils.dbunit.DbUnitModule$DbUnitListener.beforeTestSetUp(DbUnitModule.java:791)
at org.unitils.core.Unitils$UnitilsTestListener.beforeTestSetUp(Unitils.java:273)
at org.unitils.UnitilsJUnit4TestClassRunner$TestListenerInvokingMethodRoadie.runBeforesThenTestThenAfters(UnitilsJUnit4TestClassRunner.java:181)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
at org.unitils.UnitilsJUnit4TestClassRunner.invokeTestMethod(UnitilsJUnit4TestClassRunner.java:95)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:59)
at org.unitils.UnitilsJUnit4TestClassRunner.access$000(UnitilsJUnit4TestClassRunner.java:42)
at org.unitils.UnitilsJUnit4TestClassRunner$1.run(UnitilsJUnit4TestClassRunner.java:60)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.unitils.UnitilsJUnit4TestClassRunner.run(UnitilsJUnit4TestClassRunner.java:67)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: java.lang.NullPointerException
at java.lang.String.startsWith(String.java:1385)
at java.lang.String.startsWith(String.java:1414)
at org.unitils.core.dbsupport.MySqlDbSupport.toCorrectCaseIdentifier(MySqlDbSupport.java:189)
at org.unitils.core.dbsupport.DbSupport.init(DbSupport.java:97)
at org.unitils.core.dbsupport.DbSupportFactory.getDbSupport(DbSupportFactory.java:77)
at org.unitils.core.dbsupport.DbSupportFactory.getDefaultDbSupport(DbSupportFactory.java:56)
at org.unitils.dbunit.DbUnitModule.getDefaultDbSupport(DbUnitModule.java:755)
at org.unitils.dbunit.DbUnitModule.getDataSetFactory(DbUnitModule.java:725)
at org.unitils.dbunit.DbUnitModule.getDataSetFactory(DbUnitModule.java:713)
at org.unitils.dbunit.DbUnitModule.getDataSet(DbUnitModule.java:441)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:261)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:187)
... 21 more
我的 unitils-local.propreties:
database.userName=root
database.password=111111
database.storedIndentifierCase.mysql=mixed_case
dbUnit.datasetresolver.prefixWithPackageName=false
database.identifierQuoteString.mysql=none
database.schemaNames=TEST
database.dialect=mysql
database.driverClassName=com.mysql.jdbc.Driver
我的 unitils.properties:
# Name or path of the user specific properties file. This file should contain the necessary parameters to connect to the
# developer's own unit test schema. It is recommended to override the name of this file in the project specific properties
# file, to include the name of the project. The system will try to find this file in the classpath, the user home folder
# (recommended) or the local filesystem.
unitils.configuration.localFileName=unitils-local.properties
# Properties for the PropertiesDataSourceFactory
database.driverClassName=com.mysql.jdbc.Driver
database.url=jdbc:mysql://localhost:3306/test
database.schemaNames=test
# This property specifies the underlying DBMS implementation. Supported values are 'oracle', 'db2', 'mysql' and 'hsqldb'.
# The value of this property defines which vendor specific implementations of DbSupport and ConstraintsDisabler are chosen.
dbUnit.datasetresolver.prefixWithPackageName=false
我的数据集选项:
<?xml version="1.0" encoding="UTF-8"?>
<dataset xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<CLIENT ID="1" CLIENT_NAME="clientName" CLIENT_LAST_NAME="clientLastName"
EMAIL="email" ADDRESS="address" PASSWORD="password"
PHONE="phone" SECOND_PHONE="secondPhone" THIRD_PHONE="thirdPhone" CREATE_DATE="2015-10-05 08:35:25"/>
<CLIENT_GRANT ID="1" ID_CLIENT="1" ADMIN="0" MODERATOR="0" ACTIVE="1"/>
</dataset>
还有我正在尝试测试的 test-dao 类的某些部分:
@Transactional(TransactionMode.ROLLBACK)
@DataSet("ClientDaoImplTest.xml")
public class ClientDaoImplTest extends UnitilsJUnit4 {
@TestDataSource
DataSource dataSource;
ClientDaoImpl clientDao = null;
ClientGrantDaoImpl clientGrantDao = null;
@Before
public void init() {
clientDao = new ClientDaoImpl(dataSource);
clientGrantDao = new ClientGrantDaoImpl(dataSource);
TransactionHandlerImpl.setDataSource(dataSource);
clientDao.setCurrentLocalConnection(ConnectionHolder.getLocalConnection());
clientGrantDao.setCurrentLocalConnection(ConnectionHolder.getLocalConnection());
}
@After
public void destroy() {
clientDao = null;
clientGrantDao = null;
}
@Test
public void testAddNew() {
final User user = new User();
user.setEmail("email");
user.setAddress("address");
user.setPassword("password");
user.setClientName("clientName");
user.setClientLastName("clientLastName");
user.setPhone("phone");
final ClientGrant clientGrant = user.getClientGrant();
clientGrant.setClientId(user.getId());
clientGrant.setActive(true);
user.setClientGrant(clientGrant);
executeTest(new Transaction<Long>() {
@Override
public void doTransaction() throws Exception {
Long clientId = clientDao.addNew(user);
user.setId(clientId);
clientGrantDao.addNew(user.getClientGrant());
assertTrue(assertClient(clientDao.get(clientId), user));
}
});
}
我知道我的数据库选项有问题。你能帮我找到解决这个问题的方法吗?谢谢。
更新:更改我的 unitils-local.properties 中的参数后:来自:
database.identifierQuoteString.mysql=none
到:
database.identifierQuoteString.mysql=auto
a 有一个新的异常:
org.unitils.core.UnitilsException: Error inserting test data from DbUnit dataset for method public void com.jean.taxi.daoImpl.ClientDaoImplTest.testAddNew()
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:190)
at org.unitils.dbunit.DbUnitModule$DbUnitListener.beforeTestSetUp(DbUnitModule.java:791)
at org.unitils.core.Unitils$UnitilsTestListener.beforeTestSetUp(Unitils.java:273)
at org.unitils.UnitilsJUnit4TestClassRunner$TestListenerInvokingMethodRoadie.runBeforesThenTestThenAfters(UnitilsJUnit4TestClassRunner.java:181)
at org.junit.internal.runners.MethodRoadie.runTest(MethodRoadie.java:87)
at org.junit.internal.runners.MethodRoadie.run(MethodRoadie.java:50)
at org.unitils.UnitilsJUnit4TestClassRunner.invokeTestMethod(UnitilsJUnit4TestClassRunner.java:95)
at org.junit.internal.runners.JUnit4ClassRunner.runMethods(JUnit4ClassRunner.java:59)
at org.unitils.UnitilsJUnit4TestClassRunner.access$000(UnitilsJUnit4TestClassRunner.java:42)
at org.unitils.UnitilsJUnit4TestClassRunner$1.run(UnitilsJUnit4TestClassRunner.java:60)
at org.junit.internal.runners.ClassRoadie.runUnprotected(ClassRoadie.java:34)
at org.junit.internal.runners.ClassRoadie.runProtected(ClassRoadie.java:44)
at org.unitils.UnitilsJUnit4TestClassRunner.run(UnitilsJUnit4TestClassRunner.java:67)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:78)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:212)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:68)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at com.intellij.rt.execution.application.AppMain.main(AppMain.java:140)
Caused by: org.unitils.core.UnitilsException: Error while executing DataSetLoadStrategy
at org.unitils.dbunit.datasetloadstrategy.impl.BaseDataSetLoadStrategy.execute(BaseDataSetLoadStrategy.java:46)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:342)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:268)
at org.unitils.dbunit.DbUnitModule.insertDataSet(DbUnitModule.java:187)
... 21 more
Caused by: org.dbunit.dataset.NoSuchColumnException: client.ID - (Non-uppercase input column: ID) in ColumnNameToIndexes cache map. Note that the map's column names are NOT case sensitive.
at org.dbunit.dataset.AbstractTableMetaData.getColumnIndex(AbstractTableMetaData.java:117)
at org.dbunit.operation.AbstractOperation.getOperationMetaData(AbstractOperation.java:89)
at org.dbunit.operation.AbstractBatchOperation.execute(AbstractBatchOperation.java:143)
at org.dbunit.operation.CompositeOperation.execute(CompositeOperation.java:79)
at org.unitils.dbunit.datasetloadstrategy.impl.CleanInsertLoadStrategy.doExecute(CleanInsertLoadStrategy.java:45)
at org.unitils.dbunit.datasetloadstrategy.impl.BaseDataSetLoadStrategy.execute(BaseDataSetLoadStrategy.java:44)
... 24 more
也许有一些新的变体或关于这个问题的一些想法?谢谢。
最佳答案
我会说问题出在这里:
database.identifierQuoteString.mysql=none
尝试将其设置为以下内容:
database.identifierQuoteString.mysql=auto
最终类 MySqlDbSupport 中有一个错误。如果 database.identifierQuoteString.mysql
属性在属性文件中设置为 none
,则 DbSupport 类中名为 identifierQuoteString
的私有(private)字段设置为无效的。 MySqlDbSupport 中的 toCorrectCaseIdentifier
方法获取此字段的值,但忘记在将其传递给 String.startsWith
之前进行空值检查。因此我们得到一个 NullPointerException。
使用 auto
向数据库询问要使用的标识符引号字符串。我不明白为什么你会想要使用除此之外的任何东西。
关于java - Unitils数据库异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33477014/
有什么想法可以用 Unitils dbunit 完成吗? Date relative to current in the DBUnit dataset 问题是 [create_date]-placeh
是否有人知道 unitils project还活着。在 Maven 存储库中的页面上,最后一个版本是 3.3,它是 3.4.2。(实际上,他们的页面有谷歌缓存版本,据说版本是 3.4.2) 无论如何,
有人可以与我分享一下 Unitils @InjectInto 或 @InjectIntoByType 注释是如何处理的吗? 我已经检查了UnitilsJUnit4.class,这是处理此注释所必需的。
我正在尝试为我的应用程序设置一些单元测试,我想使用 Unitils 数据集进行测试,但到目前为止我遇到了很多问题。我确信我的设置有误,任何人都可以检查它是否存在问题。 我有 hibernate.cfg
我想尝试使用 DBUnit 进行单元测试,但我的数据集有问题。 这是我的持久化对象: @Entity @Table(name = "personnes") public class Personne
我正在尝试让 scala 规范和 unitils-dbunit 工作。 要使用 unitils,你必须注释你的使用 @RunWith(classOf[UnitilsJUnit4TestClassRun
我正在尝试使用 Unitils 来帮助我进行数据库测试。我想使用 Unitils/DBMaintain 功能来禁用约束。然而,这存在一些问题。我不想使用 DBMaintain 为我创建数据库,但我希望
我正在考虑为我的 spring+hibernate web 应用程序使用哪个测试框架。最初我发现了 Unitils 并对它产生了浓厚的兴趣,但后来我看到了标准的 Spring TestContext
我正在使用unitils 进行hibernate orm 测试。我采用了hibernate版本5.0.10-Final和最新的unitils版本3.4.3。我总是收到以下错误:“org.unitils
我有下表(迁移): databaseChangeLog: - changeSet: id: 1 author: me changes: - cr
EasyMock 或 Unitils Mock(不支持 Unitils 的 EasyMock)中是否有任何技术可以将模拟直接注入(inject)被测类? 例如。在 Mockito 中,可以将模拟直接注
这似乎是一个简单的问题。我在 spring 应用程序中有一些 unitils 测试。该数据库包含一些 oracle View ,我只想将数据集插入到这些 View 中。我知道可以将选项设置为 DBun
我使用了 Maven,并且我的项目有以下依赖项。 org.unitils unitils-spring 3.3 test
我是一名优秀的程序员,十分优秀!