【问题标题】:How can I inject ServletContext in Spring unit test?如何在 Spring 单元测试中注入 ServletContext?
【发布时间】:2010-03-24 09:35:19
【问题描述】:

我需要为在 Tomcat 中运行的相当复杂的应用程序编写一个 jUnit 测试。

我写了一个类来构建我的 Spring 上下文。

private static ApplicationContext
springContext = null;

springContext = new ClassPathXmlApplicationContext(
                     new String[] {"beans"....});

在应用程序中有一个调用:

public class myClass implements ServletContextAware { 

.... final String folder = **servletContext.getRealPath**("/example"); ...
}

这会破坏一切,因为 ServletContext 为空。

我已经开始构建一个模拟对象:

static ServletConfig servletConfigMock = createMock(ServletConfig.class);
static ServletContext servletContextMock = createMock(ServletContext.class);

    @BeforeClass
    public static void setUpBeforeClass() throws Exception {
        expect(servletConfigMock.getServletContext())
                 .andReturn(servletContextMock).anyTimes();

        expect(servletContextMock.getRealPath("/example"))
                 .andReturn("...fulllpath").anyTimes();
        replay(servletConfigMock);
        replay(servletContextMock);
    }

是否有一种简单的方法可以在 jUnit 测试运行时注入 ServletContext 或使用部署描述符启动 Tomcat?

我正在使用:Spring、Maven、Tomcat 6 和 EasyMock 来模拟对象。

【问题讨论】:

    标签: java unit-testing spring servlets junit


    【解决方案1】:

    您真正想要的是测试网络层。 有几种方法可以做到:

    无论何时你想在测试中注入一些东西,使用ReflectionTestUtils

    复杂性来自于 web 层不太适合单元测试的事实。它更像是一个功能测试的主题。

    如果有看起来适合单元测试的方法,它们可能属于服务层。他们不应该依赖ServletContext

    【讨论】:

    • 邮件的目标是节省时间:每次更改后,我都必须运行 maven,然后启动 tomcat。如果我可以使用 junit 测试来检查,那就太好了——在我的例子中,一个 web 服务,它有很多依赖项——方法的功能......基本上我想为每个功能测试等待更少的时间。我将研究 ReflectionTestUtils。看起来很有希望。谢谢提示。
    猜你喜欢
    • 2011-02-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-11-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多