Тестирование Spring Boot JUnit DAO без TestPropertySource - PullRequest
0 голосов
/ 09 апреля 2020

Я создаю тестовые классы JUnit4, которые проверяют функциональность DAO, развернутых в контейнере SpringBoot. Проблема, с которой я столкнулся, заключается в разработке чистого способа тестирования одного и того же DAO на нескольких платформах баз данных, поскольку это приложение будет развернуто на Oracle, SQLServer & Postgres. DAO автоматически подключаются с использованием JDBCTemplate, свойства которого определены в файле application.properties.

Простой пример моего теста выглядит следующим образом:

@SpringBootTest
@TestPropertySource(locations = "classpath:/dao-test-oracle.properties")
public class UserDaoImplTester {

    @Autowired
    UserDao userDao;

    private TestContextManager testContextManager;

    public UserDaoImplTester() {
    }

    @Before
    public void setup() throws Exception {
        this.testContextManager = new TestContextManager(getClass());
        this.testContextManager.prepareTestInstance(this);
    }

    @Test
    public void testGetUser() {
        User user = this.userDao.getUser("BLAH");
        assertEquals("XYZAL", user.getAlias());
    }
}

У меня есть проблема в том, что это использует фиксированный файл TestPropertySource для переопределения файлов в application.properties для указания на тестовую базу данных. Мне нужно иметь возможность указать альтернативные свойства для других баз данных, снова выполняя тесты.

Я рассмотрел следующие обходные пути, но у каждого есть свои минусы:

  • создайте отдельный тестер подкласса для каждой базы данных и укажите соответствующий источник свойства теста. Это означает, что 4 тестовых класса на DAO
  • Создание отдельных application.profiles для каждого тестового сценария, например application- oracle -test.properties; application-sqlserver-test.properties et c. Но я прочитал по другому тикету ( входящая ссылка, когда я нахожу его ), что вы не используете профили для этого сценария.

В идеале я хотел бы, чтобы быть в состоянии передать в отдельное местоположение TestPropertySource в JVM для каждого теста. Таким образом, я мог бы запустить их из IDE или передать их как часть цикла тестирования maven.

ASIDE: В данный момент база данных будет предварительно заполнена необходимыми данными тестирования, чтобы getxx (..) методы могут быть проверены, чтобы они возвращали правильные объекты. В конечном итоге база данных будет загружена с тестовыми данными с использованием DBUnit - я создал тестовые фреймы, отличные от SpringBoot, до которых успешно это делал.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...