用于单元测试的EasyMock对象涉及scope =“request”bean

时间:2010-06-21 09:10:29

标签: spring junit request easymock

我正在尝试为我们的一些公司代码添加一些单元测试。是的,我知道它应该已经存在,但不是每个人似乎都对我的单元测试有相同的看法。

然而,我对我来说是一个限制。不可否认,我的Java,Spring和单元测试知识并不是他们应该做的全部。我的问题是这样的:

我在我的代码中添加了一个单元测试,用于测试一个类。这个类包含一个具有scope =“request”的bean,当它尝试实例化bean时会引发异常:

java.lang.IllegalStateException: No Scope registered for scope 'request'

我相信这是因为我没有HttpServletRequest对象,但我不知道如何创建一个这样的模拟,我也不知道一旦创建,将这个模拟对象添加到单元测试,以便解决这个问题。

以下是所涉及代码的简化版本,我相信其中包含了此问题的所有细节。

我怎样才能让它发挥作用?

@Test
public void handleRequest() {
    try {
        Message<?> outMessage = (Message<?>) response.handleRequest(map);
    } catch (Exception e) {
        assertNotNull(e);
    }
    outMessage.getPayload().toString());
}

public class upddResponse extends AbstractResponseTransform {

@SuppressWarnings("unchecked")
public Message<?> handleRequest(Map<String, Message<?>> messages) throws Exception {
    super.addEnvironmentDetails(serviceResponseDocument.getServiceResponse());
}

public abstract class AbstractResponseTransform implements ResponseTransform,
            ApplicationContextAware {

    private ApplicationContext applicationContext;
    private MCSResponseAggregator mcsResponseAggregator;

    public ServiceResponseType addEnvironmentDetails(ServiceResponseType serviceResponse) throws Exception {
        try {
            mcsResponseAggregator = (MCSResponseAggregator) applicationContext
                        .getBean("mcsResponseAggregator");
        }
        catch (Exception ex) {

        }
    }
}

public interface ResponseTransform extends Transform {
    public Message<?> handleRequest(Map<String, Message<?>> messages)
            throws Exception;
}

<bean id="mcsResponseAggregator" class="com.company.aggregator.MCSResponseAggregator" scope="request" />

3 个答案:

答案 0 :(得分:0)

您需要WebApplicationContext来处理bean:scope="request"

我建议在使用Spring集成测试时使用存根对象,并在测试隔离的类时使用不带Spring的EasyMock。

答案 1 :(得分:0)

您可以在Spring Context中使用模拟:                 

但这不会解决您的问题,因为它不会让Spring理解scope =“request”。你可以创建你的own implementation of the request scope,但我觉得你最好不要经历所有这些麻烦。

简单的方法是在一个小测试环境中覆盖您的请求范围bean。从技术上讲,你没有测试原始上下文,但你会更快地完成。

答案 2 :(得分:0)

Spring 3.2附带了对此的支持。请参阅“Spring MVC Test Framework