2011-08-11 28 views
1

我想测试一个类像嘲讽配置值测试使用的弹簧

@Controller 
public class FailureController { 

    @Value("#{configValues.defaultRedirectUrl}") 
    private String defaultRedirectUrl; 
public FailureController (String defaultRedirectUrl) { 
this.defaultRedirectUrl = defaultRedirectUrl; 
} 
... 

的问题是,我不能没有测试类创建一个特殊的构造测试这个类(如上面)类时,它最终将初始化中的defaultRedirectUrl

如何在测试过程中无需创建构造函数(即将来自spring上下文)来测试它。我的主要目标是在运行测试时在没有构造函数的情况下初始化FailureController中的值。

是否有可能以某种方式Spring上下文测试期间被加载和初始化在FailureController 领域这是我一直在做,但它不工作,defaultRedirectUrl保持FailureControllernull

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration(locations = { "/applicationContext-test.xml" }) 
public class FailureControllerTest { 
    @Autowired 
    FailureController failureController; 

的applicationContext-的test.xml

... 
     <bean id="failureController" class="se.synergica.watchtower.controllers.FailureController"> 
     </bean> 

     <import resource="spring-config-test.xml" /> 
    </beans> 

谢谢。 al

回答

0

我会在test-classpath(标准项目中的src/test/resources)中创建一个单独的applicationContext.xml文件。在那里我会设置一个带虚拟值的configValues对象。 在这种情况下,你的班级也应该立即实施。

然后加载这样的测试上下文在JUnit测试:

@RunWith(SpringJUnit4ClassRunner.class) 
@ContextConfiguration("/applicationContext-test.xml") 
public class MyTest { 

    @Autowired 
    private AClassToBeTest subject; 

    //...perform test on subject 
} 

更多弹簧试验:http://static.springsource.org/spring/docs/3.0.x/reference/testing.html

+0

谢谢你,我想,我不明白你的意思...... AClassToBeTest中的Url字段会被初始化吗?我猜这不会。不是@ContextConfiguration用于仅为测试加载上下文即AClassToBeTestTest,而不是用于正在测试的类即AClassToBeTest?我已经编辑了一些我的问题。 – Deam

+0

重点在于你有一个由测试应用程序上下文实例化的AClassToBeTest。所以应该在applicationContext-test.xml中定义AClassToBeTest。你将这个实例注入到你的单元测试中,它应该像在正常运行时一样被初始化。与运行时唯一不同的是,您可以使用不同的弹簧上下文,您可以在其中加载用于测试值的不同属性文件或类似的东西。 – rompetroll

+0

由于某种原因,它不起作用。你能帮我吗?我编辑了这个问题。 – Deam

0

这些配置属性通常来自.properties文件 - 简单地使用不同的属性文件(与测试值)在单元测试类路径

+0

通过使用属性文件,将被测试的类中的字段被初始化。以及我的测试如何在其他答案中识别属性文件,@ContextConfiguration被用于此(尽管这对我没有用)。 – Deam

+0

@ContextConfiguration是关于xml文件的,它依次加载一个属性文件(通常)以从外部位置获取属性 – Bozho