Unit testing with MongoDB

后端 未结 5 1093
后悔当初
后悔当初 2020-12-07 16:37

My database of choice is MongoDB. I\'m writing a data-layer API to abstract implementation details from client applications - that is, I\'m essentially providing a single pu

5条回答
  •  心在旅途
    2020-12-07 17:25

    Today I think the best practice is to use testcontainers library (Java) or testcontainers-python port on Python. It allows to use Docker images with unit tests. To run container in Java code just instantiate GenericContainer object (example):

    GenericContainer mongo = new GenericContainer("mongo:latest")
        .withExposedPorts(27017);
    
    MongoClient mongoClient = new MongoClient(mongo.getContainerIpAddress(), mongo.getMappedPort(27017));
    MongoDatabase database = mongoClient.getDatabase("test");
    MongoCollection collection = database.getCollection("testCollection");
    
    Document doc = new Document("name", "foo")
            .append("value", 1);
    collection.insertOne(doc);
    
    Document doc2 = collection.find(new Document("name", "foo")).first();
    assertEquals("A record can be inserted into and retrieved from MongoDB", 1, doc2.get("value"));
    

    or on Python (example):

    mongo = GenericContainer('mongo:latest')
    mongo.with_bind_ports(27017, 27017)
    
    with mongo_container:
        def connect():
            return MongoClient("mongodb://{}:{}".format(mongo.get_container_host_ip(),
                                                        mongo.get_exposed_port(27017)))
    
        db = wait_for(connect).primer
        result = db.restaurants.insert_one(
            # JSON as dict object
        )
    
        cursor = db.restaurants.find({"field": "value"})
        for document in cursor:
            print(document)
    

提交回复
热议问题