目前我的课程似乎是
@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());
}
}
我不喜欢什么?
@RunWith(SpringJUnit4ClassRunner.class)来
有没有办法默认它?以便每个测试都与该课程一起运行?
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {DemographicAttributesManager.class}) 告诉要包含哪些类,以及它是注释驱动的测试。
有没有办法将默认设置为package
扫描类,默认情况下我不必放AnnotationConfigContextLoader
?
由于
答案 0 :(得分:6)
在每个Test课程中,我都必须包含
@RunWith(SpringJUnit4ClassRunner.class)
有没有办法默认它?以便每个测试都与该课程一起运行?
不,没有办法更改JUnit的默认Runner
。 JUnit将默认Runner
定义为org.junit.runners.JUnit4
。因此,如果您想使用其他跑步者(例如SpringJUnit4ClassRunner
),则必须明确声明。这就是JUnit的工作原理。
然而,正如其他人指出的那样,@RunWith
注释是继承的。因此,您可以在项目中的其他测试类扩展的基础测试类中声明它。
我必须输入
@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = {DemographicAttributesManager.class})
来告诉要包含哪些类,以及它是注释驱动的测试。
你不需要明确声明AnnotationConfigContextLoader
作为加载器。每当您声明classes
的{{1}}属性时,Spring会自动为您使用@ContextConfiguration
。如果您声明静态内部AnnotationConfigContextLoader
类,从而使用默认检测机制,情况也是如此。
在相应的Javadoc以及Testing chapter of the Spring Reference Manual中都记录了这一点。
有没有办法将默认设置为类扫描包,默认情况下我不需要放置AnnotationConfigContextLoader?
关于@Configuration
,请参见上文。
关于软件包扫描,不,在使用AnnotationConfigContextLoader
时,没有明确支持软件包扫描;但是,使用带有@ContextConfiguration
注释的静态内部@Configuration
类,当然可以为给定包配置组件扫描。当然,您也可以在使用@ComponentScan
注释的同一基础测试类中声明该配置。
此致
Sam(Spring TestContext Framework的作者)
答案 1 :(得分:0)
@RunWith和@ContextConfiguration(loader = ...)可以从基础测试类继承。 我不知道如何避免每个测试类的@ContextConfiguration(classes = ...)。 但我不认为摆脱它是一个非常有用的功能:我更喜欢使用mockito和没有@RunWith(spring)进行真正的单元测试,并且有真正的集成测试可以加载整个应用程序上下文(这将是在所有测试中被春天缓存。)