Spring测试:如何默认配置为@AnnotationDriven?

day*_*mer 3 java spring spring-test

目前我的课看起来像

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {DemographicAttributesManager.class})
public class DemographicAttributesManagerTest {

    @Autowired
    private DemographicAttributesManager demographicAttributesManager;

    @Test
    public void testGetGenders() throws Exception {
        final Map<Integer, String> genders = demographicAttributesManager.getGenders();
        assertEquals(3, genders.size());
    }
}
Run Code Online (Sandbox Code Playgroud)

我不喜欢什么?

  1. 在每个Test课程中我都必须包含

@RunWith(SpringJUnit4ClassRunner.class)来

有没有办法默认它?以便每个测试都与该课程一起运行?

  1. 我要打字

@ContextConfiguration(loader = AnnotationConfigContextLoader.class,classes = {DemographicAttributesManager.class})告诉要包含哪些类,以及它是注释驱动的测试.

有没有办法将默认设置为package扫描类和默认,我不必放AnnotationConfigContextLoader

谢谢

Sam*_*nen 6

在每个Test课程中我都必须包含 @RunWith(SpringJUnit4ClassRunner.class)

有没有办法默认它?以便每个测试都与该课程一起运行?

不,没有办法更改RunnerJUnit 的默认值.JUnit将默认值定义Runnerorg.junit.runners.JUnit4.因此,如果您想使用其他跑步者(例如SpringJUnit4ClassRunner),则必须明确声明它.这就是JUnit的工作原理.

但是,正如其他人指出的那样,@RunWith注释是继承的.因此,您可以在项目中的其他测试类扩展的基础测试类中声明它.

我必须键入@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {DemographicAttributesManager.class})告诉要包含哪些类,并且它是注释驱动的测试.

不是需要显式声明AnnotationConfigContextLoader的装载机.每当你声明classes属性时@ContextConfiguration,Spring会自动AnnotationConfigContextLoader为你使用.如果您声明静态内部@Configuration类,则使用默认检测机制也是如此.

这些都在相应的Javadoc以及Spring Reference ManualTesting一章中有详细记载.

有没有办法将默认设置为类扫描包,默认情况下我不需要放置AnnotationConfigContextLoader?

关于AnnotationConfigContextLoader,见上文.

关于软件包扫描,不是,单独使用时没有明确支持软件包扫描@ContextConfiguration; 但是,使用带@Configuration注释的静态内部类可以为给定的包配置组件扫描@ComponentScan.当然,您也可以在使用注释的同一基本测试类中声明该配置@RunWith.

问候,

Sam(Spring TestContext Framework的作者)