我正在使用spring test运行JUnit测试,我的代码如下所示:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {})
@Transactional (propagation = Propagation.REQUIRED)
@Rollback
public class MyTest {
@Autowired
private MyRepository repository;
@Before
public void before() {
//clean repository
}
@Test
public void test_1() {
//add new entity
}
@Test
public void test_2() {
//add new entity
}
...
}
我想在所有测试之前回滚处于状态的数据库。表会回滚,但id生成的顺序会随着每次测试而增加。
请帮我找到在每次测试前设置起始值顺序的方法。
我正在使用Spring、Hibernate和HsqlDb
如果您使用@Transactional调用方法,您将无法进行回滚。您可以做的是使用@After以删除所有数据库,并在@前再次创建它。我认为这不是一个很好的主意,您应该删除这些值以隔离每个测试。我建议您使用H2数据库,以便能够在内存存储中使用,因此您不必担心id号。
必须将此依赖项添加到pom中:
<dependency>
<groupId>com.h2database</groupId>
<artifactId>h2</artifactId>
<version>1.4.193</version>
</dependency>
以及内部的配置。xml应该是这样的:
<hibernate-configuration>
<session-factory>
<property name="hibernate.connection.driver_class">org.h2.Driver</property>
<property name="hibernate.connection.username">sa</property>
<property name="hibernate.connection.password"></property>
<property name="hibernate.connection.url">jdbc:h2:mem:testDB;DATABASE_TO_UPPER=false;DB_CLOSE_DELAY=-1</property>
<property name="hibernate.dialect">org.hibernate.dialect.H2Dialect</property>
<property name="show_sql">false</property>
<property name="hbm2ddl.auto">create</property>
</session-factory>
</hibernate-configuration>
当然,你应该让它适应你的系统,但你必须保留用户名和密码,才能成功连接。
如果不想自动创建表,可以在连接URL上添加以下参数:
INIT=RUNSCRIPT FROM 'classpath:scripts/create.sql
这将在测试前运行您的脚本。
然后在你的测试中,你可以做一些链接:
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {})
@Transactional (propagation = Propagation.REQUIRED)
public class MyTest {
@Autowired
private MyRepository repository;
@Test
public void test_1() {
//add new entity
}
@Test
public void test_2() {
//add new entity
}
@After
public void tearDown(){
repository.clean();
}
}
清洁方法可以是这样的
public void clean(){
for (T obj: this.findall()) //replacing T for the type if you don't use generics
session.delete(obj); //your entity manager or session, depending on how you do the queries
}
问题内容: 如何确定unittest方法的顺序?字母或数字前缀是否正确? 要么 问题答案: 您可以通过将sortTestMethodsUsing设置为None来禁用它:http ://docs.python.org/2/library/unittest.html#unittest.TestLoader.sortTestMethodsUsing 对于纯单元测试,您是对的。但是对于组件测试和集成测试…
问题内容: 我正在尝试使用Spring测试实体EJB3。 EJB本身不使用Spring,并且我想使生产JPA配置的重复保持最少(例如,不重复persistence.xml)。 我的单元测试似乎可以正常工作,但是即使我的单元测试应该是事务性的,数据仍会在各种测试方法之间持久存在…… 这是我的实体: 我的单元测试: 和我的appContext.xml: 当我运行测试时,test2失败,因为它找到了两个
如果它没有返回任何东西,是否可能以某种方式测试它是否停止了这个if语句?我的意思是,我想把某种断言,检查“好吧,上下文是空的,所以它在这个返回时停止了”。 当然,问题是类是空的,为什么我想测试这种方法可能会有问题,但我想听听一些可能性。
我试图实现一个单元测试的在与。 我在关注这个链接,它运行良好,但结果为空,当我用浏览器测试我的websocket时,它会发送所需的结果。 让我展示一下我的测试课 } 这是我的< code > WebSocketConfiguration 类 } 这是我从服务器得到的响应 更新: 在下面的答案中添加建议的更改并经过进一步的研究后,我的测试类现在看起来像这样 } 经过这些更改后,我现在可以将堆栈跟踪打
我使用的是Spring Boot 1.5.2.Release,我的服务类注释为 我的单元测试类注释为:
Android Studio 1.1 添加了单元测试支持,详细请看 Unit testing support。本章的其余部分描述的是 “instrumentation tests”。利用 Instrumentation 测试框架可以构建独立的测试 APK 并运行在真实设备(或模拟器)中进行测试。