Выполнение теста JUnit для коллекции MongoDB с использованием Maven

Опубликовано: 8 Января, 2023

MongoDB — это универсальная база данных NoSQL, которая широко используется в индустрии программного обеспечения. Везде, где нет необходимости в строгих отношениях реляционной базы данных, а также если есть вероятность частого получения документа, всегда лучше использовать MongoDB. В этой статье рассмотрим способы

  1. Подключение к MongoDB,
  2. Создание коллекции,
  3. Вставка документа и проверка вставленных данных с помощью JUnit
  4. Обновите документ и проверьте обновленные данные с помощью JUNIT.

В качестве примера проекта выполняется вся операция. У нас может быть это как базовый проект, и это делается как проект maven.

Пример проекта

Структура проекта:

Это проект, управляемый maven, и, следовательно, давайте начнем с

пом.xml

XML




         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
                             http://maven.apache.org/maven-v4_0_0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.gfg.mongodbtesting</groupId>
    <artifactId>mongodbTesting</artifactId>
    <packaging>jar</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>mongodbTesting</name>
    <url>http://maven.apache.org</url>
    <dependencies>
        <!-- mongodb dependency -->
        <dependency>
            <groupId>org.mongodb</groupId>
            <artifactId>mongo-java-driver</artifactId>
            <version>2.10.1</version>
        </dependency>
        <!-- junit dependency -->
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>            
        </dependency>
    </dependencies>
  
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.3.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
                <configuration>
                    <downloadSources>true</downloadSources>
                    <downloadJavadocs>true</downloadJavadocs>
                </configuration>
            </plugin>
  
        </plugins>
    </build>
  
</project>

Давайте посмотрим на важный java-файл, который выполняет все 4 шага, как указано выше.

JUnitTestingOfMongoDBCollection.java

В этом файле

  • Установление соединения с MongoDB выполнено
  • MongoDB довольно удобен для пользователя. Если базы данных нет, она создается автоматически
/**** Connect to MongoDB ****/
// Since 2.10.0, uses MongoClient
MongoClient mongo = new MongoClient("localhost", 27017);

/**** Get database ****/
// if database doesn"t exists, MongoDB will create it for you
DB db = mongo.getDB("geeksforgeeks");

Точно так же, если коллекция не существует, она автоматически создается с помощью приведенного ниже кода.

/**** Get collection / table from "geeksforgeeks" ****/
// if collection doesn"t exists, MongoDB will create it for you
DBCollection table = db.getCollection("authors");

К этому моменту времени,

  • Создана именованная база данных 'geeksforgeeks'
  • создается именованная коллекция "авторы"

Теперь давайте вставим документ и проверим его. После вставки мы можем видеть, что «имя», «возраст», «технология» и «createdDate» — это созданные столбцы, и их соответствующие значения проверяются. Во время обновления документа дополнительно добавляется новый столбец под названием «количество сообщений», и такая возможность легко реализуема в MongoDB. Давайте проверим то же самое. Весь набор кода приведен ниже.

Java




import java.util.Date;
  
// Following imports are necessary for JUNIT
import static org.junit.Assert.assertEquals;
import org.junit.Test;
  
// Following imports are necessary for MongoDB
import java.net.UnknownHostException;
import com.mongodb.BasicDBObject;
import com.mongodb.DB;
import com.mongodb.DBCollection;
import com.mongodb.DBCursor;
import com.mongodb.DBObject;
import com.mongodb.MongoClient;
import com.mongodb.MongoException;
  
public class JUnitTestingOfMongoDBCollection {
  
    @Test
    public void testInsertedAndUpdatedDocument() throws Exception {
  
        try {
  
            /**** Connect to MongoDB ****/
            // Since 2.10.0, uses MongoClient
            MongoClient mongo = new MongoClient("localhost", 27017);
  
            /**** Get database ****/
            // if database doesn"t exists, MongoDB will create it for you
            DB db = mongo.getDB("geeksforgeeks");
  
            /**** Get collection / table from "geeksforgeeks" ****/
            // if collection doesn"t exists, MongoDB will create it for you
            DBCollection table = db.getCollection("authors");
  
            /**** Insert ****/
            // create a document to store key and value
            BasicDBObject document = new BasicDBObject();
            document.put("name", "author1");
            document.put("age", 30);
            document.put("technology", "java,mongodb");
            document.put("createdDate", new Date());
            table.insert(document);
  
            /**** Find and display ****/
            BasicDBObject searchQuery = new BasicDBObject();
            searchQuery.put("name", "author1");
              
            DBCursor cursor = table.find(searchQuery);
            // While displaying let us check 
              // with assert statements as well
            while (cursor.hasNext()) {
                DBObject object = cursor.next();
                // Checking whether inserted name is author1
                assertEquals("author1", object.get("name").toString());
                // Checking whether inserted age is 30
                assertEquals(30, Integer.parseInt(object.get("age").toString()));
                // Checking whether inserted technology is java,mongodb
                assertEquals("java,mongodb", object.get("technology").toString());
                  
                  
            }
              
            /**** Update ****/
            // search document where name="author1" 
              // and update it with new values
            BasicDBObject query = new BasicDBObject();
            query.put("name", "author1");
  
            BasicDBObject newDocument = new BasicDBObject();
            // changing the technology column value
            newDocument.put("technology", "java,.net,mongodb");
            // additionally adding a new column. 
              // This is the advantage of mongodb. 
            // We no need to have concrete structure 
              // from the beginning as like RDBMS database
            newDocument.put("numberofposts", "10");
  
            BasicDBObject updateObj = new BasicDBObject();
            updateObj.put("$set", newDocument);
              
              // This way we can update the document
            table.update(query, updateObj);
  
            /**** Find and display ****/
            BasicDBObject searchQuery2 
                = new BasicDBObject().append("name", "author1");
  
            DBCursor cursor2 = table.find(searchQuery2);
            // Check the same as well
            // Now we can check whether the technology
              // got changed to java,.net,mongodb
            // and also numberofposts to 10
            while (cursor2.hasNext()) {
                DBObject object = cursor2.next();
                assertEquals("author1", object.get("name").toString());
                assertEquals(30, Integer.parseInt(object.get("age").toString()));
                assertEquals("java,.net,mongodb", object.get("technology").toString());
                assertEquals("10", object.get("numberofposts").toString());
            }
  
              
        } catch (UnknownHostException e) {
            e.printStackTrace();
        } catch (MongoException e) {
            e.printStackTrace();
        }
  
    }
}

Мы можем выполнить тестирование через ниже

Выход:

После выполнения всей программы давайте сравним данные MongoDB в бэкенде

Вывод

MongoDB — очень гибкая универсальная база данных NoSQL. Мы можем легко подключить MongoDB через java, вставить и обновить документ, а также протестировать его через JUNIT, написав код, как указано в примере проекта.