Начало работы с тестированием
По умолчанию каждый проект Jmix уже содержит структуру каталогов для автоматизированных тестов и два класса тестов в каталоге src/test/java/<base-package>/user:
- 
UserTest.java- интеграционный тест для сущностиUser.
- 
UserUiTest.java- интеграционный тест UI для экранов управления пользователями.
UserTest сохраняет сущность User через API Jmix DataManager.
Затем тест проверяет, что при загрузке пользователя по его имени пользователь найден и соответствует изначально сохраненному пользователю.
package com.company.demo.user;
import com.company.demo.entity.User;
import com.company.demo.test_support.AuthenticatedAsAdmin;
import io.jmix.core.DataManager;
import io.jmix.core.security.UserRepository;
import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.Test;
import org.junit.jupiter.api.extension.ExtendWith;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.security.core.userdetails.UserDetails;
import org.springframework.security.crypto.password.PasswordEncoder;
import static org.assertj.core.api.Assertions.assertThat;
/**
 * Sample integration test for the User entity.
 */
@SpringBootTest (1)
@ExtendWith(AuthenticatedAsAdmin.class) (2)
public class UserTest {
    @Autowired (3)
    DataManager dataManager;
    @Autowired
    PasswordEncoder passwordEncoder;
    @Autowired
    UserRepository userRepository;
    User savedUser;
    @Test (4)
    void test_saveAndLoad() {
        // Create and save a new User
        User user = dataManager.create(User.class);
        user.setUsername("test-user-" + System.currentTimeMillis());
        user.setPassword(passwordEncoder.encode("test-passwd"));
        savedUser = dataManager.save(user);
        // Check the new user can be loaded
        User loadedUser = dataManager.load(User.class).id(user.getId()).one();
        assertThat(loadedUser).isEqualTo(user);
        // Check the new user is available through UserRepository
        UserDetails userDetails = userRepository.loadUserByUsername(user.getUsername());
        assertThat(userDetails).isEqualTo(user); (5)
    }
    @AfterEach (6)
    void tearDown() {
        if (savedUser != null)
            dataManager.remove(savedUser);
    }
}| 1 | Аннотация @SpringBootTestуказывает, что во время выполнения теста запускается контекст Spring. | 
| 2 | AuthenticatedAsAdminпозволяет тесту взаимодействовать с системой и базой данных от имени пользователяadmin. | 
| 3 | Зависимости инжектированы в тестовый код используя аннотацию Spring @Autowired. | 
| 4 | Каждый тест-кейс помечен аннотацией JUnit @Test. | 
| 5 | Для выполнения проверок используется библиотека AssertJ, автоматически доступная в проектах Jmix. | 
| 6 | Такие операции как очистка базы данных, выполняются в методах завершения, помеченных аннотацией JUnit @AfterEach. | 
Сам тест является обычным интеграционным тестом Spring Boot. Он запускает полный контекст Spring и взаимодействует с реальной базой данных.
| По умолчанию тесты используют ту же базу данных, что и приложение при локальном выполнении. | 
Jmix Studio использует возможности IntelliJ IDEA для выполнения тестов. Когда вы открываете класс UserTest.java в Jmix Studio, вы можете запустить тест-кейсы, щелкнув на кнопку воспроизведения на строке класса теста. Среда разработки покажет результат выполнения теста и успешен он или нет.
Более подробную информацию о том, как выполнять тесты, см. в документации IntelliJ.
Следующие разделы подробно объясняют различные типы тестов.