当前位置: 首页 > 知识库问答 >
问题:

@webappconfiguration未注入

斜和硕
2023-03-14

我正在尝试使用Spring3.2.1创建spring-mvc测试。根据一些教程,我认为这将是直接的。

下面是我的测试:

@RunWith( SpringJUnit4ClassRunner.class )
@ContextConfiguration( loader = AnnotationConfigContextLoader.class, classes = { JpaTestConfig.class } )
@WebAppConfiguration
public class HomeControllerTest {

    @Resource
    private WebApplicationContext webApplicationContext;

    private MockMvc mockMvc;

    @Test
    public void testRoot() throws Exception {
        mockMvc.perform(get("/").accept(MediaType.TEXT_PLAIN)).andDo(print())
            // print the request/response in the console
            .andExpect(status().isOk()).andExpect(content().contentType(MediaType.TEXT_PLAIN))
            .andExpect(content().string("Hello World!"));
    }

    @Before
    public void setUp() {
        mockMvc = MockMvcBuilders.webAppContextSetup(webApplicationContext).build();
    }
}

下面是我的相关pom.xml

<dependency>
    <groupId>org.hamcrest</groupId>
    <artifactId>hamcrest-all</artifactId>
    <version>1.3</version>
    <scope>test</scope>
</dependency>
<dependency>
    <groupId>junit</groupId>
    <artifactId>junit</artifactId>
    <version>4.10</version>
    <scope>test</scope>
<exclusions>
    <exclusion>
        <artifactId>hamcrest-core</artifactId>
        <groupId>org.hamcrest</groupId>
    </exclusion>
</exclusions>
</dependency>
<dependency>
    <groupId>org.springframework</groupId>
    <artifactId>spring-test</artifactId>
    <version>3.2.1.RELEASE</version>
</dependency>

我有以下测试配置类:

@Configuration
@EnableTransactionManagement
@ComponentScan( basePackages = { "com.myproject.service", "com.myproject.utility",
        "com.myproject.controller" } )
@ImportResource( "classpath:applicationContext.xml" )
public class JpaTestConfig {

    @Bean
    public LocalContainerEntityManagerFactoryBean entityManagerFactoryBean() {
    ...
    }

    // various other services/datasource but not controllers
}

我的理解是,添加@webappconfiguration将强制Spring注入它。但是当我从Eclipse中运行这个测试时,我得到:

原因:org.springframework.beans.factory.NoSuchBeanDefinitionException:找不到依赖项得[org.springframework.web.context.webApplicationContext]类型得合格bean:需要至少一个符合此依赖项自动候选条件得bean.依赖关系批注:{@org.springframework.beans.factory.annotation.AutoWired(required=true)}(位于org.springframework.beans.factory.support.defaultlistablebeanfactory.raisenosuchbeandefinitionexception(defaultlistablebeanfactory.967)(位于org.springframework.beans.factory.support.defaultlistablebeanfactory.doResolveDependency

更新-我不得不更改测试Java配置类

@Configuration
@EnableWebMvc
@ComponentScan( basePackages = { "...." } )
@EnableTransactionManagement
@ImportResource( "classpath:applicationContext.xml" )
public class JpaTestConfig extends WebMvcConfigurationSupport {

然而,现在的问题是,我可以调用我的REST服务,但它正在调用一些其他服务,包括数据库调用。测试调用和模拟响应的首选方法是什么。我想测试有效和无效条件。

共有1个答案

刘乐童
2023-03-14

在我的例子中,问题已经通过替换来解决:

@ContextConfiguration(loader = AnnotationConfigContextLoader.class, classes = { ... })

@ContextConfiguration(loader = AnnotationConfigWebContextLoader.class, classes = { ... })

注意加载器类名中的Web。在前面的加载器中,尽管有@webappconfiguration注释,但仍然注入了GenericApplicationContext

 类似资料:
  • 我使用RoutingDataSource为应用程序的每个租户动态创建数据源。8-12小时后,应用程序与数据库失去连接,我得到了jpa事务异常。我发现以下属性负责验证和维持数据库连接,所以我将它们放在了应用程序中。财产。 数据源bean是在下面的类中创建的。如何将上述属性注入每个目标数据源?

  • 我尝试使用Jersey Jetty和Spring来设置一个简单的REST应用程序,为自动连接设置beans。我也在通过Gradle管理这件事。 我有两个主要endpoint< code>/users和< code>/greeting。 上的仅返回文本响应并正常工作。那里没有自动安装的依赖项。 然而,如果我在< code>/usersendpoint上执行get,我将使用一个API类返回响应,该类应

  • 我有以下课程: 我从控制器调用方法test(): 然而,spring并没有注入构建。版本值,即使类具有组件注释。 我在控制器中使用相同的属性,它工作正常。 我做错了什么?

  • 我是一名学生,我对symfony和stackoverflow非常陌生,如果我犯了一些错误,请原谅。 以下是我尝试访问页面时出现的错误: [语义错误]方法AppBundle\Controller\FormController::newAction()中的注释“@Route”从未导入。您是否忘记为该注释添加“use”语句?在/home/buddy/bamber/realbaumber/src/AppB

  • 问题内容: 我目前正在尝试将Dagger 2集成到Android应用程序中。我的项目设置如下: 图书馆 应用(取决于库) 在我的库项目中,我定义了一个类,稍后将其插入到库以及应用程序项目中的其他需要该类的类(活动和常规类)中。 现在-例如在我的“片段”或“活动”或常规类中,我将上述Singleton注入如下: 大概我想,因为实际上myManager始终为null。显然,它的构造函数也从未被调用过,

  • 我有一个Spring启动应用程序,我最近从v1.3.3. RELEASE升级到v1.4.2. RELEASE。 用于我在v1中的集成测试。3.3,我有一个豆子,我能够成功地监视它。我在运行测试时,配置文件,下面的被激活,而不是应用程序的。 我正在升级到v1。4.2.发布并希望使用spyBean注释模拟单个方法,而不依赖于概要文件。 我对我的测试方法做了以下改变,以尝试它- 然而,当我尝试上述方法时