2010-06-21 133 views
2

我试图给我们的一些公司代码添加一些单元测试。是的,我知道它应该已经存在,但并不是每个人都像我一样对单元测试有相同的看法。单元测试涉及范围=“请求”bean的EasyMock对象

但是,我已经对我有点阻碍了。无可否认,我的Java,Spring和单元测试知识并不全是他们应该做的。我的问题是这个虽然:

我已经添加了一个单元测试我的代码,它测试一个类。这个类包括具有范围=“请求”的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" /> 
+0

或多或少的http://stackoverflow.com/questions/2411343/request-scoped-beans-in-spring-testing的副本 - 忽略有关测试执行侦听器的位。 – skaffman 2010-06-21 09:51:41

回答

0

你需要一个WebApplicationContext处理豆:scope="request"

我建议使用与Spring集成测试存根对象,并使用了EasyMock没有春天,当你测试类孤立。

0

您可以在Spring上下文中使用模拟考试:

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

最简单的办法是重写你的要求在一个小范围内测试作用域bean。你在技术上不是在测试原始上下文,但是你会更快地完成。