1 В избранное 0 Ответвления 0

OSCHINA-MIRROR/redraiment-mysqld

Присоединиться к Gitlife
Откройте для себя и примите участие в публичных проектах с открытым исходным кодом с участием более 10 миллионов разработчиков. Приватные репозитории также полностью бесплатны :)
Присоединиться бесплатно
Клонировать/Скачать
Внести вклад в разработку кода
Синхронизировать код
Отмена
Подсказка: Поскольку Git не поддерживает пустые директории, создание директории приведёт к созданию пустого файла .keep.
Loading...
README.md

mysqld

Встроенный сервер MySQL для JUnit-тестирования.

Фон

При разработке программ, связанных с базами данных, обычно требуется подключение к серверу MySQL при модульном тестировании. Если над проектом работает несколько человек, можно либо создать общий тестовый сервер MySQL, доступный всем, либо настроить экземпляр на каждого разработчика в его среде разработки. Оба эти подхода могут быть неудобными для последующего обслуживания, поэтому лучше предоставить временную базу данных в памяти, подобную SQLite3 или H2, которая автоматически создаётся с нуля, заполняется тестовыми данными и очищается после выполнения тестов.

Принцип работы

me.zzp/mysqld использует mysql/mysql-connector-mxj для реализации встроенного сервера MySQL. mysql-connector-mxj упаковывает весь исполняемый файл MySQL в jar-файл (что делает его довольно большим), а затем распаковывает его во время выполнения в указанный каталог и запускает временный сервер MySQL через внешнюю программу.

Использование

1. Добавление зависимостей в Maven:

<project>
    ...
    <repositories>
        <repository>
            <id>zzp-mvn-repo</id>
            <url>http://10.0.40.218</url>
        </repository>
    </repositories>

    <dependencies>
        ...
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.12</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>me.zzp</groupId>
            <artifactId>mysqld</artifactId>
            <version>1.0.0</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>ch.qos.logback</groupId>
            <artifactId>logback-classic</artifactId>
            <version>1.1.7</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
</project>

Поскольку me.zzp/mysqld зависит от slf4j-api, необходимо предоставить реализацию slf4j.

2. Написание тестовых случаев:

package me.zzp.mysql.file;

import me.zzp.mysqld.Mysqld;
import org.junit.AfterClass;
import org.junit.BeforeClass;

public class FooTest {

    private static Mysqld mysql;

    @BeforeClass
    public static void setUpClass() {
        mysql = Mysqld.start();
    }

    @AfterClass
    public static void tearDownClass() {
        mysql.close();
    }
}

Запуск экземпляра MySQL осуществляется через Mysqld.start(). Метод Mysqld::close() закрывает базу данных и завершает процесс. Существует три формы метода start:

  • start(String root, int port):
    • root: путь к каталогу, где хранятся исполняемый файл и файлы данных MySQL.
    • port: порт базы данных.
  • start(int port):
    • если установлено системное свойство zzp.mysqld.root, используется его значение, иначе используется значение по умолчанию для mysqld.
    • используется указанный порт.
  • start():
    • если установлено системное свойство zzp.mysqld.root, используется его значение, иначе используется значение по умолчанию для mysqld.
    • если установлено системное свойство zzp.mysqld.port, используется его значение, иначе используется порт по умолчанию 3306.

Путь, соответствующий root, должен быть каталогом, который будет создан автоматически при отсутствии, поэтому необходимы права на запись. Порт, соответствующий port, должен быть свободен, иначе запуск завершится неудачно.

Объединение с maven-surefire-plugin

По умолчанию JUnit запускает отдельный сервер MySQL для каждого теста и закрывает его после завершения. Это приводит к неэффективности из-за постоянного запуска и остановки серверов.

Используя плагин maven-surefire, можно избежать повторного запуска, запустив один общий экземпляр MySQL перед всеми тестами и закрыв его после их завершения. Настройка выполняется следующим образом:

<project>
    ...
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-surefire-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <properties>
                        <property>
                            <name>listener</name>
                            <value>me.zzp.mysqld.MysqldRunListener</value>
                        </property>
                    </properties>
                    <systemPropertyVariables>
                                <zzp.mysqld.root>mysqld</zzp.mysqld.root>
                                <zzp.mysqld.port>3306</zzp.mysqld.port>
                    </systemPropertyVariables>
                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

Свойства zzp.mysqld.root и zzp.mysqld.port являются необязательными. Они имеют то же значение, что и свойства root и port.

После настройки тесты не требуют изменений кода. Выполнение mvn test автоматически запускает все тесты.

Комментарии ( 0 )

Вы можете оставить комментарий после Вход в систему

Введение

Встроенный сервер MySQL для юнит-тестов JUnit. В настоящее время проект устарел, рекомендуется использовать Testcontainers (https://java.testcontainers.org/modules/databases/mysql/). Развернуть Свернуть
AGPL-3.0
Отмена

Обновления

Пока нет обновлений

Участники

все

Недавние действия

Загрузить больше
Больше нет результатов для загрузки
1
https://api.gitlife.ru/oschina-mirror/redraiment-mysqld.git
git@api.gitlife.ru:oschina-mirror/redraiment-mysqld.git
oschina-mirror
redraiment-mysqld
redraiment-mysqld
master