我正在开发一个spring应用程序,我将所有数据存储在mLab中,所以mongoDB . 当应用程序运行时,它从这里获取信息,但是,当尝试测试控制器,服务和存储库时,它没有连接,这就是我尝试包含嵌入式mongoDB的原因 . 我的应用程序属性是(填充数据):

spring.data.mongodb.database=
spring.data.mongodb.host=
spring.data.mongodb.port=37445 
spring.data.mongodb.username=
spring.data.mongodb.password=

然后,我有一个MongoConfig类,应该是测试使用的类:

import java.io.IOException;
import org.springframework.context.annotation.Bean;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.mongodb.core.MongoTemplate;

import com.mongodb.MongoClient;

import cz.jirutka.spring.embedmongo.EmbeddedMongoFactoryBean;

@Configuration
public class MongoConfig {
    private static final String MONGO_DB_URL = "localhost";
    private static final String MONGO_DB_NAME = "test";

    @Bean
    public MongoTemplate mongoTemplate() throws IOException {
        EmbeddedMongoFactoryBean mongo = new EmbeddedMongoFactoryBean();
        mongo.setBindIp(MONGO_DB_URL);
        MongoClient mongoClient = mongo.getObject();
        MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, MONGO_DB_NAME);
        return mongoTemplate;
    }
}

Controller测试是:

import static org.junit.Assert.assertEquals;
import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get;
import static org.springframework.test.web.servlet.result.MockMvcResultMatchers.redirectedUrl;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.InjectMocks;
import org.mockito.MockitoAnnotations;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.http.HttpStatus;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;
import org.springframework.test.web.servlet.MockMvc;
import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder;
import org.springframework.test.web.servlet.setup.MockMvcBuilders;

import com.uniovi.Application;

@SpringBootTest(classes = { Application.class })
@RunWith(SpringJUnit4ClassRunner.class)
public class OperatorControllerTest {

    @InjectMocks
    private OperatorControllerTest operatorController;

    private MockMvc mockMvc;

    @Before
    public void setUp() throws Exception {
        MockitoAnnotations.initMocks(this);
        this.mockMvc = MockMvcBuilders.standaloneSetup(operatorController).build();
    }

    @Test
    public void testNotLoggedIn() throws Exception {
        MockHttpServletRequestBuilder request = get("/operator/list");
        int status = mockMvc.perform(request).andExpect(redirectedUrl("/login")).andReturn().getResponse().getStatus();
        assertEquals(HttpStatus.FOUND.value(), status);
    }

}

pom.xml有这三个依赖项(除了项目其余部分的其他依赖项):

<dependency>
            <groupId>de.flapdoodle.embed</groupId>
            <artifactId>de.flapdoodle.embed.mongo</artifactId>
            <version>2.0.0</version><!--$NO-MVN-MAN-VER$-->
        </dependency>
        <dependency>
            <groupId>cz.jirutka.spring</groupId>
            <artifactId>embedmongo-spring</artifactId>
            <version>1.3.1</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-mongodb</artifactId>
    </dependency>

问题是,在执行时,我收到此错误:

java.lang.IllegalStateException:无法在org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:125)〜[spring-test-5.0.4.RELEASE.jar:5.0.4]中加载ApplicationContext . 发布在org.springframework.test的org.springframework.test.context.support.DefaultTestContext.getApplicationContext(DefaultTestContext.java:107)〜[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] . org.springframework.test.context.web.ServletTestExecutionListener.prepareTestInstance(ServletTestExecutionListener)中的context.web.ServletTestExecutionListener.setUpRequestContextIfNecessary(ServletTestExecutionListener.java:190)〜[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] .java:132)〜[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE]在org.springframework.test.context.TestContextManager.prepareTestInstance(TestContextManager.java:242)〜[spring-test- 5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.cr eteTest(SpringJUnit4ClassRunner.java:227)[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.springframework.test.context.junit4.SpringJUnit4ClassRunner $ 1.runReflectiveCall(SpringJUnit4ClassRunner.java:289)[ spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)[junit-4.12.jar:4.12] at org .springframework.test.context.junit4.SpringJUnit4ClassRunner.methodBlock(SpringJUnit4ClassRunner.java:291)[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.springframework.test.context.junit4.SpringJUnit4ClassRunner .runChild(SpringJUnit4ClassRunner.java:246)[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)[在org.junit的org.junit.runners.ParentRunner $ 3.run(ParentRunner.java:290)[junit-4.12.jar:4.12]的spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] . runners.ParentRunner $ 1.schedule(ParentRunner.java:71)[junit-4.12.j ar:4.12] org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)[junit-4.12.jar:4.12] at org.junit.runners.ParentRunner.access $ 000(ParentRunner.java:58)[junit -4.12.jar:4.12] org.junit.runners.ParentRunner $ 2.evaluate(ParentRunner.java:268)[junit-4.12.jar:4.12] at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate (RunBeforeTestClassCallbacks.java:61)[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)[在org.springframework.test的org.junit.runners.ParentRunner.run(ParentRunner.java:363)[junit-4.12.jar:4.12]的spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] .context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)[org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run中的[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] (JUnit4TestReference.java:86)[ . cc /:na]在org.eclipse.jdt.internal.junit.ru nner.TestExecution.run(TestExecution.java:38)[ . cp /:na] at or.e.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:459)[ . cp /:na] at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:678)[ . cp /:na] at or.e.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java: 382)[ . cy /:na] at or.e.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:192)[ . cp /:na]引起:org.springframework.beans.factory . BeanCreationException:在类路径资源[org / springframework / boot / autoconfigure / mongo / embedded / EmbeddedMongoAutoConfiguration.class]中定义名称为“embeddedMongoServer”的bean时出错:init方法的调用失败;嵌套异常是java.io.IOException:无法启动过程:失败错误:10049Ladirecciónsearchicitadanoesválidaeneste contexto . for socket:34.243.17.210:37445 2018-04-11T19:56:30.505 0200 E STORAGE [initandlisten]启动时无法设置套接字 . 2018-04-11T19:56:30.505 0200 I CONTROL [initandlisten] dbexit:rc:48 at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1710)~ [spring-beans-5.0.4 .RELEASE.jar:5.0.4.RELEASE]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:583)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4 . 发布org.springframework.beans上的org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:502)~ [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] . factory.support.AbstractBeanFactory.lambda $ doGetBean $ 0(AbstractBeanFactory.java:312)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE]在org.springframework.beans.factory.support.DefaultSingletonBeanRegistry . org.springframework.beans.factor中的getSingleton(DefaultSingletonBeanRegistry.java:228)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] or.s.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory)中的y.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:310)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] .java:200)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760)~ [spring- bean-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:868)〜[spring-context-5.0.4.RELEASE.jar:5.0 .4.RELEASE]在org.springframework.boot上的org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:549)〜[spring-context-5.0.4.RELEASE.jar:5.0.4.RELEASE] .SpringApplication.refresh(SpringApplication.java:752)〜[spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE]在org.springframework.boot.SpringApplication.refreshContext(SpringApplica)在 . org.springframework.boot.SpringApplication.run(SpringApplication.java:327)〜[spring-boot-2.0]的.java:388)〜[spring-boot-2.0.0.RELEASE.jar:2.0.0.RELEASE] .O.RELEASE.jar:2.0.0.RELEASE]在org.springframework.boot.test.context.SpringBootContextLoader.loadContext(SpringBootContextLoader.java:138)〜[spring-boot-test-2.0.0.RELEASE.jar: 2.0.0.RELEASE]在org.springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContextInternal(DefaultCacheAwareContextLoaderDelegate.java:99)〜[spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] at org . springframework.test.context.cache.DefaultCacheAwareContextLoaderDelegate.loadContext(DefaultCacheAwareContextLoaderDelegate.java:117)~ [spring-test-5.0.4.RELEASE.jar:5.0.4.RELEASE] ... 25个常用帧省略引起:java . io.IOException:无法启动进程:失败errno:10049Ladirecciónsearchicitadanoesválidaeneste contexto . for socket:34.243.17.210:37445 2018-04-11T19:56:30.505 0200 E STORAGE [initandlisten]启动时无法设置套接字 . 2018-04-11T19:56:30.505 0200 I CONTROL [initandlisten] dbexit:rc:48 at de.flapdoodle.embed.mongo.AbstractMongoProcess.onAfterProcessStart(AbstractMongoProcess.java:79)〜[de.flapdoodle.embed.mongo-2.0 .d.jar:na] at de.flapdoodle的de.flapdoodle.embed.process.runtime.AbstractProcess . (AbstractProcess.java:114)〜[de.flapdoodle.embed.process-2.0.1.jar:na] . embed.mongo.AbstractMongoProcess . (AbstractMongoProcess.java:53)〜[de.flapdoodle.embed.mongo-2.0.0.jar:na] at de.flapdoodle.embed.mongo.MongodProcess . (MongodProcess.java:50)〜 [de.flapdoodle.embed.mongo-2.0.0.jar:na] at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:44)〜[de.flapdoodle.embed.mongo-2.0.0 . jar:na] at de.flapdoodle.embed.mongo.MongodExecutable.start(MongodExecutable.java:34)〜[de.flapdoodle.embed.mongo-2.0.0.jar:na] at de.flapdoodle.embed.process . runtime.Executable.start(Executable.java:101)〜[de.flapdoodle.embed.process-2.0.1.jar:na] at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)〜[na:1 .8.0_161] at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)〜[na:1.8.0_161] at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)〜[na:1.8.0_161] at java.lang.reflect.Method.invoke(Method.java:498)〜[na:1.8.0_161]在org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1835)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] at at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1778)〜[spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] org.springframework.beans.factory.support .AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1706)~ [spring-beans-5.0.4.RELEASE.jar:5.0.4.RELEASE] ...省略了40个常用帧

我已经浏览了整个互联网,所有不同的解决方案对我的代码都没用 .