Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/mongodb/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 组件需要一个名为';mongoTemplate&x27;在JUnit 5控制器测试中找不到_Java_Mongodb_Junit_Junit5_Mongotemplate - Fatal编程技术网

Java 组件需要一个名为';mongoTemplate&x27;在JUnit 5控制器测试中找不到

Java 组件需要一个名为';mongoTemplate&x27;在JUnit 5控制器测试中找不到,java,mongodb,junit,junit5,mongotemplate,Java,Mongodb,Junit,Junit5,Mongotemplate,我想用内存中的MongoDB数据库创建JUnit5控制器集成测试。在测试运行时出现以下错误,即: *************************** APPLICATION FAILED TO START *************************** Description: A component required a bean named 'mongoTemplate' that could not be found. Action: Consider definin

我想用内存中的MongoDB数据库创建JUnit5控制器集成测试。在测试运行时出现以下错误,即:

***************************
APPLICATION FAILED TO START
***************************

Description:

A component required a bean named 'mongoTemplate' that could not be found.


Action:

Consider defining a bean named 'mongoTemplate' in your configuration.
我的控制器看起来像:

@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = DeviceController.class)
@EnableMongoRepositories
class DeviceControllerTest {

  @MockBean
  private MongoTemplate mongoTemplate;

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private DeviceService deviceService;
}


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.interview</groupId>
  <artifactId>exercise</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>device</name>

  <properties>
    <java.version>11</java.version>
    <hibernate.version>5.4.0.Final</hibernate.version>
    <mapstruct.processor.version>1.3.0.Final</mapstruct.processor.version>
    <mapstruct.version>1.3.0.Final</mapstruct.version>
    <spring.cloud.starter.netflix.hystrix.version>2.1.2.RELEASE</spring.cloud.starter.netflix.hystrix.version>
    <apache.common.lang.version>3.0</apache.common.lang.version>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-library</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-library</artifactId>
      <version>2.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>2.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hibernate.ogm</groupId>
      <artifactId>hibernate-ogm-mongodb</artifactId>
      <version>${hibernate.version}</version>
    </dependency>

    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <version>${mapstruct.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct</artifactId>
      <version>${mapstruct.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${apache.common.lang.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      <version>${spring.cloud.starter.netflix.hystrix.version}</version>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>de.flapdoodle.embed</groupId>
      <artifactId>de.flapdoodle.embed.mongo</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>

        <dependencies>
          <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.1.0</version>
          </dependency>
          <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.1.0</version>
          </dependency>
        </dependencies>

        <configuration>
          <source>11</source>
          <target>11</target>
          <annotationProcessorPaths>
            <path>
              <groupId>org.mapstruct</groupId>
              <artifactId>mapstruct-processor</artifactId>
              <version>${mapstruct.processor.version}</version>
            </path>
            <path>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>1.18.6</version>
            </path>
          </annotationProcessorPaths>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
    <finalName>spring-boot-device-docker</finalName>
  </build>

</project>
我想说:

excludeAutoConfiguration = EmbeddedMongoAutoConfiguration.class
或:

配置类如下:

@EnableMongoRepositories
@EnableAutoConfiguration
public class SpringMongoConfiguration {

  @Bean
  public MongoTemplate mongoTemplate() throws Exception {
    return new MongoTemplate(new MongoClient("localhost"), "findall");
  }
}
我的pom.xml看起来像:

@ExtendWith(SpringExtension.class)
@WebMvcTest(controllers = DeviceController.class)
@EnableMongoRepositories
class DeviceControllerTest {

  @MockBean
  private MongoTemplate mongoTemplate;

  @Autowired
  private MockMvc mockMvc;

  @MockBean
  private DeviceService deviceService;
}


<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 https://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.1.7.RELEASE</version>
    <relativePath/> <!-- lookup parent from repository -->
  </parent>
  <groupId>com.interview</groupId>
  <artifactId>exercise</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>device</name>

  <properties>
    <java.version>11</java.version>
    <hibernate.version>5.4.0.Final</hibernate.version>
    <mapstruct.processor.version>1.3.0.Final</mapstruct.processor.version>
    <mapstruct.version>1.3.0.Final</mapstruct.version>
    <spring.cloud.starter.netflix.hystrix.version>2.1.2.RELEASE</spring.cloud.starter.netflix.hystrix.version>
    <apache.common.lang.version>3.0</apache.common.lang.version>
  </properties>

  <dependencies>

    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
      <exclusions>
        <exclusion>
          <groupId>junit</groupId>
          <artifactId>junit</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-core</artifactId>
        </exclusion>
        <exclusion>
          <groupId>org.hamcrest</groupId>
          <artifactId>hamcrest-library</artifactId>
        </exclusion>
      </exclusions>
    </dependency>

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-library</artifactId>
      <version>2.1</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hamcrest</groupId>
      <artifactId>hamcrest-core</artifactId>
      <version>2.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-web</artifactId>
    </dependency>

    <dependency>
      <groupId>org.projectlombok</groupId>
      <artifactId>lombok</artifactId>
      <optional>true</optional>
    </dependency>
    <dependency>
      <groupId>org.springframework.boot</groupId>
      <artifactId>spring-boot-starter-test</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.hibernate.ogm</groupId>
      <artifactId>hibernate-ogm-mongodb</artifactId>
      <version>${hibernate.version}</version>
    </dependency>

    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct-processor</artifactId>
      <version>${mapstruct.version}</version>
      <scope>provided</scope>
    </dependency>

    <dependency>
      <groupId>org.mapstruct</groupId>
      <artifactId>mapstruct</artifactId>
      <version>${mapstruct.version}</version>
    </dependency>

    <dependency>
      <groupId>org.apache.commons</groupId>
      <artifactId>commons-lang3</artifactId>
      <version>${apache.common.lang.version}</version>
    </dependency>

    <dependency>
      <groupId>org.springframework.cloud</groupId>
      <artifactId>spring-cloud-starter-netflix-hystrix</artifactId>
      <version>${spring.cloud.starter.netflix.hystrix.version}</version>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-params</artifactId>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-api</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>org.junit.jupiter</groupId>
      <artifactId>junit-jupiter-engine</artifactId>
      <version>5.3.2</version>
      <scope>test</scope>
    </dependency>

    <dependency>
      <groupId>de.flapdoodle.embed</groupId>
      <artifactId>de.flapdoodle.embed.mongo</artifactId>
      <scope>test</scope>
    </dependency>
  </dependencies>

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.8.0</version>

        <dependencies>
          <dependency>
            <groupId>org.junit.platform</groupId>
            <artifactId>junit-platform-surefire-provider</artifactId>
            <version>1.1.0</version>
          </dependency>
          <dependency>
            <groupId>org.junit.jupiter</groupId>
            <artifactId>junit-jupiter-engine</artifactId>
            <version>5.1.0</version>
          </dependency>
        </dependencies>

        <configuration>
          <source>11</source>
          <target>11</target>
          <annotationProcessorPaths>
            <path>
              <groupId>org.mapstruct</groupId>
              <artifactId>mapstruct-processor</artifactId>
              <version>${mapstruct.processor.version}</version>
            </path>
            <path>
              <groupId>org.projectlombok</groupId>
              <artifactId>lombok</artifactId>
              <version>1.18.6</version>
            </path>
          </annotationProcessorPaths>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-maven-plugin</artifactId>
      </plugin>
    </plugins>
    <finalName>spring-boot-device-docker</finalName>
  </build>

</project>

4.0.0
org.springframework.boot
spring启动程序父级
2.1.7.发布
网上采访
运动
0.0.1-快照
装置
11
5.4.0.1最终版本
1.3.0.1最终版本
1.3.0.1最终版本
2.1.2.1发布
3
org.springframework.boot
弹簧起动试验
测试
朱尼特
朱尼特
org.hamcrest
汉克雷斯特岩芯
org.hamcrest
汉克雷斯特图书馆
org.hamcrest
汉克雷斯特图书馆
2.1
测试
org.hamcrest
汉克雷斯特岩芯
2.1
测试
org.springframework.boot
spring启动程序数据mongodb
org.springframework.boot
SpringBootStarterWeb
org.projectlombok
龙目
真的
org.springframework.boot
弹簧起动试验
测试
org.hibernate.ogm
冬眠ogm mongodb
${hibernate.version}
org.mapstruct
mapstruct处理器
${mapstruct.version}
假如
org.mapstruct
映射结构
${mapstruct.version}
org.apache.commons
commons-lang3
${apache.common.lang.version}
org.springframework.cloud
spring cloud starter netflix hystrix
${spring.cloud.starter.netflix.hystrix.version}
org.junit.jupiter
朱尼特朱庇特酒店
测试
org.junit.jupiter
JUnitJupiter api
5.3.2
测试
org.junit.jupiter
朱尼特木星发动机
5.3.2
测试
de.flapdoodle.embed
de.flapdoodle.embed.mongo
测试
org.apache.maven.plugins
maven编译器插件
3.8.0
org.junit.platform
junit平台surefire提供程序
1.1.0
org.junit.jupiter
朱尼特木星发动机
5.1.0
11
11
org.mapstruct
mapstruct处理器
${mapstruct.processor.version}
org.projectlombok
龙目
1.18.6
org.springframework.boot
springbootmaven插件
spring引导设备docker

我想我检查了所有可能的选择,真的不知道下一步该怎么做才能达到目标。关于如何为JUnit 5控制器测试配置测试类的建议,我将不胜感激。

对于单元测试,controller class@MockBean用于模拟服务层或存储库层类或实例

当有人配置了一些配置注释(如

@ComponentScan(basePackages = {})
@EnableMongoRepositories
@EnableAutoConfiguration
@Configuration 
在主Spring引导应用程序类中,将配置分离到另一个类文件帮助我克服了这个问题,如下文所述


这个问题令人困惑——一方面,您希望使用内存中的Mongo实例,另一方面,您正在模拟服务(和MongoTemplate)。请注意,
@WebMvcTest
将禁用完全自动配置,而只应用与MVC测试相关的配置。如果需要完整的上下文,请使用
@SpringBootTest
。最重要的是,控制器代码(和服务代码)对于我们查找依赖关系非常有用problem@Lesiak没错,我误解了我在集成测试中应该如何使用MockBean。最后我像这样做了:
@ExtendWith(SpringExtension.class)@WebMvcTest(controllers=DeviceController.class)class DeviceControllerTest{@Autowired private MockMvc MockMvc;@MockBean private deviceposition deviceposition;@MockBean private DeviceService DeviceService;@MockBean private restemplate restemplate;}
它正在工作