- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我有下表(迁移):
databaseChangeLog:
- changeSet:
id: 1
author: me
changes:
- createTable:
tableName: person
columns:
- column:
name: id
type: int
autoIncrement: true
constraints:
primaryKey: true
nullable: false
- column:
name: first_name
type: varchar(255)
constraints:
nullable: false
- column:
name: last_name
type: varchar(255)
constraints:
nullable: false
- changeSet:
id: 2
author: me
changes:
- insert:
tableName: person
columns:
- column:
name: first_name
value: First
- column:
name: last_name
value: Last
以及以下 DAO:
public interface HelloDao {
@SqlQuery(
"SELECT * FROM person"
)
@Mapper(PersonMapper.class)
Person getPerson();
}
具有以下实体 + 映射器:
public class Person {
private String firstName;
private String lastName;
public Person(String firstName, String lastName) {
this.firstName = firstName;
this.lastName = lastName;
}
public String getFirstName() {
return firstName;
}
public void setFirstName(String firstName) {
this.firstName = firstName;
}
public String getLastName() {
return lastName;
}
public void setLastName(String lastName) {
this.lastName = lastName;
}
}
-
public class PersonMapper implements ResultSetMapper<Person> {
public Person map(int index, ResultSet r, StatementContext ctx) throws SQLException {
return new Person(r.getString("first_name"), r.getString("last_name"));
}
}
我正在使用 junit 和 unitils 为这个 Dao 编写单元测试。我的 unitils.properties
文件设置如下:
database.driverClassName=org.postgresql.Driver
database.url=jdbc:postgresql://localhost:5432/springbootdb
database.dialect=postgresql
database.userName=<username>
database.password=<password>
database.schemaNames=public
为清楚起见,这是我的 application.properties
文件:
spring.thymeleaf.cache=false
spring.main.show-banner=false
logging.level.jdbc=OFF
logging.level.jdbc.sqltiming=DEBUG
logging.level.jdbc.resultsettable=DEBUG
spring.datasource.url= jdbc:postgresql://localhost:5432/springbootdb
spring.datasource.username=<username>
spring.datasource.password=<password>
spring.jpa.hibernate.ddl-auto=create-drop
这是我的测试:
@Transactional(TransactionMode.ROLLBACK)
@RunWith(UnitilsBlockJUnit4ClassRunner.class)
public class HelloDaoTest {
@TestDataSource
DataSource dataSource;
private DBI dbi;
private HelloDao helloDao;
@Before
public void setUp() throws Exception {
dbi = new DBI(dataSource);
helloDao = dbi.onDemand(HelloDao.class);
}
@Test
@DataSet("HelloDaoTest.testSet.xml")
public void helloDao() throws Exception {
Person p = helloDao.getPerson();
assertEquals("First", p.getFirstName());
}
}
还有我的夹具(HelloDaoTest.testSet.xml
)
<?xml version="1.0" encoding="UTF-8" ?>
<dataset>
<person
first_name="First"
last_name="Last"
/>
</dataset>
和 pom.xml 文件:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.experiment.springboot</groupId>
<artifactId>testspringbootproj</artifactId>
<version>1.0-SNAPSHOT</version>
<packaging>jar</packaging>
<name>Spring Boot Blank Project (from https://github.com/making/spring-boot-blank)</name>
<parent>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-parent</artifactId>
<version>1.2.7.RELEASE</version>
</parent>
<properties>
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<start-class>com.experiment.springboot.App</start-class>
<java.version>1.8</java.version>
<lombok.version>1.14.8</lombok.version>
<log4jdbc.log4j2.version>1.16</log4jdbc.log4j2.version>
<rest.assured.version>2.3.3</rest.assured.version>
<jdbi.version>2.78</jdbi.version>
</properties>
<dependencies>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-web</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-jdbc</artifactId>
</dependency>
<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
<dependency>
<groupId>org.projectlombok</groupId>
<artifactId>lombok</artifactId>
<version>${lombok.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>com.jayway.restassured</groupId>
<artifactId>rest-assured</artifactId>
<version>${rest.assured.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.bgee.log4jdbc-log4j2</groupId>
<artifactId>log4jdbc-log4j2-jdbc4.1</artifactId>
<version>${log4jdbc.log4j2.version}</version>
</dependency>
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1206-jdbc42</version>
</dependency>
<dependency>
<groupId>org.jdbi</groupId>
<artifactId>jdbi</artifactId>
<version>${jdbi.version}</version>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-core</artifactId>
</dependency>
<dependency>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
</dependency>
<dependency>
<groupId>org.unitils</groupId>
<artifactId>unitils-dbunit</artifactId>
<version>3.4.6</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-maven-plugin</artifactId>
<dependencies>
<dependency>
<groupId>org.springframework</groupId>
<artifactId>springloaded</artifactId>
<version>${spring-loaded.version}</version>
</dependency>
</dependencies>
</plugin>
<plugin>
<groupId>org.liquibase</groupId>
<artifactId>liquibase-maven-plugin</artifactId>
<version>3.4.1</version>
<configuration>
<propertyFile>src/main/resources/liquibase.properties</propertyFile>
</configuration>
</plugin>
</plugins>
</build>
</project>
当我运行此测试时,出现以下错误:
java.lang.NullPointerException
at org.springframework.transaction.support.AbstractPlatformTransactionManager.rollback(AbstractPlatformTransactionManager.java:820)
at org.unitils.database.transaction.impl.DefaultUnitilsTransactionManager.rollback(DefaultUnitilsTransactionManager.java:157)
at org.unitils.database.DatabaseModule.rollbackTransaction(DatabaseModule.java:425)
at org.unitils.database.DatabaseModule.endTransactionForTestMethod(DatabaseModule.java:390)
at org.unitils.database.DatabaseModule$DatabaseTestListener.afterTestTearDown(DatabaseModule.java:486)
at org.unitils.core.Unitils$UnitilsTestListener.afterTestTearDown(Unitils.java:315)
at org.unitils.core.junit.AfterTestTearDownStatement.evaluate(AfterTestTearDownStatement.java:48)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:78)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:57)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
at org.unitils.core.junit.BeforeTestClassStatement.evaluate(BeforeTestClassStatement.java:41)
at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:51)
at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
看来连测试代码都没有到。我做错了什么?
最佳答案
您的 pom.xml 中确实有两个数据库实现,但没有指定范围。 Spring 无法猜测哪一个应该是正确的,因此是一个异常(exception)。
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
</dependency>
[...]
<dependency>
<groupId>org.postgresql</groupId>
<artifactId>postgresql</artifactId>
<version>9.4-1206-jdbc42</version>
</dependency>
这很可能会进一步帮助您:Configure specific in memory database for testing purpose in Spring
关于java - 使用 Unitils 针对 Postgres 数据库运行单元测试时出现 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43968850/
有什么想法可以用 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
我是一名优秀的程序员,十分优秀!