Макет источника данных JNDI для теста JUnit - PullRequest
0 голосов
/ 02 ноября 2019

Я пытаюсь смоделировать источник данных JNDI в тест JUnit, но по какой-то причине он не работает:

Я использую этот импорт:

import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doReturn;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;
import java.util.Optional;    
import javax.activation.DataSource;
import javax.naming.Context;
import javax.naming.InitialContext;
import javax.xml.bind.JAXBException;    
import org.junit.BeforeClass;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.springframework.boot.test.context.SpringBootTest;
import org.springframework.boot.test.mock.mockito.MockBean;
import org.springframework.mock.jndi.SimpleNamingContextBuilder;
import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

@SpringBootTest(classes = Application.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class BinCountryCheckFilterImplTest    {

    ..........

    @MockBean
    private static DataSource dataSource;

    @BeforeClass
    public static void setupJndi() throws Exception {
        SimpleNamingContextBuilder.emptyActivatedContextBuilder();
        Context context = new InitialContext();
        context.bind("java:global/production_gateway", dataSource);
    }

    @BeforeEach
    public void beforeEachTest() throws IOException {    
        ........          
    }

    @Test
    public void testBinCountryCheckFilterImpl(){
    .....

}

Есть ли способ решить эту проблему? Вы видите некоторые проблемы с импортированными пакетами? Мне нужно использовать JUnit5.

1 Ответ

0 голосов
/ 02 ноября 2019

Проблема в том, что вы смешиваете JUnit 4 с JUnit 5, он же Юпитер. @RunWith и @BeforeClass из JUnit 4, @BeforeEach из Юпитера;@Test может быть любым из них в зависимости от импорта.

Если вы замените @BeforeEach на @Before, ваши настройки могут работать;по крайней мере, вы будете ближе к чему-то работающему. Убедитесь, что все ваши импортные файлы либо из org.junit, либо из org.junit.jupiter.api

...