JUnit测试SpringJUnit4ClassRunner

时间:2018-07-27 16:21:32

标签: java spring junit spring-test

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = {
        "classpath:spring/integration-test.xml"
        })
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = true)
public class TestClass {

    @Autowired
    private Dao dao;

    @Test
    @Transactional
    public void test1() {       

    }
}

你好! 我正在尝试从Spring Tool Suite调试配置中启动单个测试方法,但有一个例外:

java.lang.Exception: No tests found matching [{ExactMatcher:fDisplayName=test1], {ExactMatcher:fDisplayName=test1(com.org.TestClass )], {LeadingIdentifierMatcher:fClassName=com.org.TestClass ,fLeadingIdentifier=test1]] from org.junit.internal.requests.ClassRequest@302e67
    at org.junit.internal.requests.FilterRequest.getRunner(FilterRequest.java:40)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createFilteredTest(JUnit4TestLoader.java:77)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.createTest(JUnit4TestLoader.java:68)
    at org.eclipse.jdt.internal.junit4.runner.JUnit4TestLoader.loadTests(JUnit4TestLoader.java:43)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:444)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:382)
    at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)

但是由于在此示例中我删除了@RunWith(SpringJUnit4ClassRunner.class),所以测试方法成功启动。

对于消除这种麻烦的任何有用建议,我将不胜感激。 谢谢。


我有3.1.1春季版本

这是进口:

import org.junit.runner.RunWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.data.domain.Page;
import org.springframework.test.context.ContextConfiguration;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.context.transaction.TransactionConfiguration;
import org.springframework.transaction.annotation.Transactional;
import org.testng.annotations.Test;

1 个答案:

答案 0 :(得分:1)

这是导致弹簧配置特定的原因。 Spring为您的类创建了代理实例,这是因为在您的测试方法下有@Transactional注释,并且该方法之后不包含@Test注释。

请在此处查看有关spring proxy的信息:https://spring.io/blog/2012/05/23/transactions-caching-and-aop-understanding-proxy-usage-in-spring

您真的需要在测试方法下使用@Transactional批注吗?

您只能创建用于测试的类帮助程序,在其中编写@Transactional带注释的方法,然后将其注入(注释@Autowired)并在测试类中使用