sql >> Database >  >> NoSQL >> MongoDB

Hoe de junit-tests de ingebedde mongoDB te laten gebruiken in een springboot-toepassing?

Een alternatief zou zijn om de volledige lente-opstarttoepassing in test uit te voeren. In dit geval wordt uw Spring Boot-toepassing automatisch ontdekt en wordt embedded mongoDB gedownload en gestart door Spring Boot

@RunWith(SpringRunner.class)
@SpringBootTest
public class YourSpringBootApplicationTests {

08:12:14.676 INFO EmbeddedMongo:42 - opmerking:noprealloc kan de prestaties in veel toepassingen schaden 08:12:14.694 INFO EmbeddedMongo:42 -2017-12-31T08:12:14.693+0200 I CONTROL [initandlisten] MongoDBstart:pid=2246 port =52299 08:12:22.005 INFO-verbinding:71 -Geopende verbinding [connectionId{localValue:2, serverValue:2}] tolocalhost:52299

In het geval van jouw voorbeeld zou je de code kunnen wijzigen om embedded Mongo op een andere poort te starten:

  1. voeg het bestand test/resoures/test.properties toe om eigenschappen van application.properties te overschrijven

    mongo.db.name=person_testDB
    mongo.db.url=localhost
    mongo.db.port=12345
    
  2. wijzig MongoDBConfig:voeg veld MONGO_DB_PORT toe

    @EnableMongoRepositories
    public class MongoDBConfig {
        @Value("${mongo.db.url}")
        private String MONGO_DB_URL;
    
        @Value(("${mongo.db.port:27017}"))
        private int MONGO_DB_PORT;
    
        @Value("${mongo.db.name}")
        private String MONGO_DB_NAME;
    
        @Bean
        public MongoTemplate mongoTemplate() {
            MongoClient mongoClient = new MongoClient(MONGO_DB_URL, MONGO_DB_PORT);
            MongoTemplate mongoTemplate = new MongoTemplate(mongoClient, MONGO_DB_NAME);
            return mongoTemplate;
        }
    }
    
  3. testklasse wijzigen:verwijder @DataMongoTest-annotatie. Deze annotatie dwingt het starten van een ingesloten mongoDB-instantie

    static MongodExecutable mongodExecutable;
    
    @BeforeClass
    public static void setup() throws Exception {
        MongodStarter starter = MongodStarter.getDefaultInstance();
        String bindIp = "localhost";
        int port = 12345;
        IMongodConfig mongodConfig = new MongodConfigBuilder()
                .version(Version.Main.PRODUCTION)
                .net(new Net(bindIp, port, Network.localhostIsIPv6()))
                .build();
        mongodExecutable = null;
        try {
            mongodExecutable = starter.prepare(mongodConfig);
            mongodExecutable.start();
        } catch (Exception e){
            // log exception here
            if (mongodExecutable != null)
                mongodExecutable.stop();
        }
    }
    
    @AfterClass
    public static void teardown() throws Exception {
        if (mongodExecutable != null)
            mongodExecutable.stop();
    }
    

Een andere manier is om MongoRepository te gebruiken en init embedded Mongo als onderdeel van de test @Configuration-klasse:het wordt hier beschreven:Hoe configureert u Embedded MongDB voor integratietests in een Spring Boot-toepassing?




  1. Hoe de 'OF'-voorwaarde toe te passen in de opdracht redis-toetsen?

  2. Hydra-CLI verbinden met een wachtwoordbeveiligde redis-server?

  3. Hoe de pubsub-time-outfunctie van redis implementeren?

  4. Voorwaarden voor meerdere deelname met behulp van de $lookup-operator