Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/331.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/ajax/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何使Spring@Transactional在junit测试中工作_Java_Spring_Junit_Spring Transactions_Spring Java Config - Fatal编程技术网

Java 如何使Spring@Transactional在junit测试中工作

Java 如何使Spring@Transactional在junit测试中工作,java,spring,junit,spring-transactions,spring-java-config,Java,Spring,Junit,Spring Transactions,Spring Java Config,我尝试使用Spring@Transactional注释进行测试 @ContextConfiguration(classes = SomeTest.SomeTestSpringConfig.class) @RunWith(SpringJUnit4ClassRunner.class) public class SomeTest { @Autowired MyBean some; @Autowired PlatformTransactionManager trans

我尝试使用Spring@Transactional注释进行测试

@ContextConfiguration(classes = SomeTest.SomeTestSpringConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class SomeTest {

    @Autowired
    MyBean some;

    @Autowired
    PlatformTransactionManager transactionManager;

    @Test
    public void testSpring() throws Exception {
        some.method();
        assertTrue(some.isTransactionalWorks);
    }

    @EnableAspectJAutoProxy(proxyTargetClass = true)
    @EnableLoadTimeWeaving
    @EnableTransactionManagement(mode = AdviceMode.ASPECTJ)
    @TransactionConfiguration
    static class SomeTestSpringConfig {

        @Bean
        PlatformTransactionManager transactionManager() {
            return new MyTransactionManager(dataSource());
        }

        @Bean
        MyBean some() {
            return new MyBean();
        }

        @Bean
        DataSource dataSource() {
            return new SimpleDriverDataSource(Driver.load(), "jdbc:h2:mem:unit-test");
        }
    }
}

class MyBean {

    @Autowired
    DataSource dataSource;

    public boolean isTransactionalWorks;

    @Transactional
    private void someInTransaction() {
        try {
            dataSource.getConnection();
        } catch (SQLException e) {
            e.printStackTrace();
        }
        System.out.println("I should be in transaction");
    }

    public void method() {
        someInTransaction();
    }
}


class MyTransactionManager implements PlatformTransactionManager, InitializingBean {
    private final DataSourceTransactionManager base = new DataSourceTransactionManager();

    @Autowired
    MyBean some;

    public MyTransactionManager(DataSource datasource) {
        base.setDataSource(datasource);
    }

    @Override
    public TransactionStatus getTransaction(TransactionDefinition definition) throws TransactionException {
        some.isTransactionalWorks = true;
        return base.getTransaction(definition);
    }

    @Override
    public void commit(TransactionStatus status) throws TransactionException {
        base.commit(status);
    }

    @Override
    public void rollback(TransactionStatus status) throws TransactionException {
        base.rollback(status);
    }

    @Override
    public void afterPropertiesSet() throws Exception {
        base.afterPropertiesSet();
    }
}
我还为这个测试的VM选项添加了-javaagent:D:/libs/spring-instrument-4.1.7.RELEASE.jar。
但它总是失败。我错过了什么?

请查看此链接,我认为这是你面临的类似问题

在这个链接中,他要求在vm参数中提供aspectjweaver.jar和spring-instrument.jar


很高兴知道它起作用了

请检查这个链接,我想这是你面临的类似问题。在这个链接中,他要求在vm中提供aspectjweaver.jar和spring-instrument.jarargument@SanketBajoria答对 了你是对的。请添加您的评论作为答案。我会接受的。