Java 在Deltaspike中回滚JUnit测试

Java 在Deltaspike中回滚JUnit测试,java,junit,spring-data-jpa,deltaspike,deltaspike-jpa,Java,Junit,Spring Data Jpa,Deltaspike,Deltaspike Jpa,我正在JavaSE项目中使用ApacheDeltaspike和OpenWebbeansforCDI。我在JavaEE项目中使用了SpringDataJPA,通过在类或测试方法上方添加@Transactional注释,可以很容易地设置不向数据库提交数据的单元测试。然而,我还没有找到与Deltaspike相同的技术 除了在每次测试后手动回滚数据或在每次运行测试时删除并重新创建数据库外,是否有任何方法可以指定每个单元测试在完成后回滚数据更改 我的单元测试看起来有点像以下内容: @RunWith(Cdi

我正在JavaSE项目中使用ApacheDeltaspike和OpenWebbeansforCDI。我在JavaEE项目中使用了SpringDataJPA,通过在类或测试方法上方添加
@Transactional
注释,可以很容易地设置不向数据库提交数据的单元测试。然而,我还没有找到与Deltaspike相同的技术

除了在每次测试后手动回滚数据或在每次运行测试时删除并重新创建数据库外,是否有任何方法可以指定每个单元测试在完成后回滚数据更改

我的单元测试看起来有点像以下内容:

@RunWith(CdiTestRunner.class)
@Transactional // has no effect
public class FooUnitTest {
    @Inject
    private FooRepository fooRepository;

    @Test
    @Transactional // no effect either
    public void testFoo() {
        Foo foo = new Foo();
        fooRepository.save(foo); // foo is persisted even outside the test
    }
}

@Repository
public interface FooRepository extends EntityRepository<Foo, Integer> { }
@RunWith(CdiTestRunner.class)
@事务//无效
公共类单元测试{
@注入
私人食物储存库;
@试验
@交易//也没有效果
公共void testFoo(){
Foo-Foo=新的Foo();
fooRepository.save(foo);//即使在测试之外,foo也会被持久化
}
}
@存储库
公共接口FooRepository扩展了EntityRepository{}

docs注释:“return true to trigger#rollback for The current transaction,否则为false”@AlanHay是的,我已经尝试过了。如果回滚,你不知道提交是否有效。但是基本上使用@Transactional(readOnly=true),如果你想注释你的测试类,你必须配置:deltaspike.testcontrol.use_test_class_as_cdi_bean=true(在META-INF/apache deltaspike.properties中),如果你想重置数据而不是表,你需要一条适用于数据库的语句(比如truncate schema)。您还可以查看:org.apache.deltaspike.testcontrol.spi.junit.TestStatementDecorFactory有一个名为TransactionStatementDecorFactory的实现,它执行回滚。我对您的代码有一个问题。现在我正在尝试运行delta spike数据模块的单元—我想测试存储库。作为CDI实现,我使用JBoss Weld。但是,我的JUnit无法工作,因为它们无法注入存储库。你有类似的问题吗?你是怎么处理的?谢谢