Тестирование метода службы @Transactional JUnit - без базы данных - PullRequest
0 голосов
/ 17 июня 2020

Я хочу написать модульный тест для метода службы, который аннотируется @Transactional и имеет вызовы уровня Dao, который создает запросы на основе критериев гибернации. При выполнении теста я получаю следующее исключение, связанное с транзакцией.

     org.springframework.transaction.CannotCreateTransactionException
         Caused by: javax.persistence.PersistenceException
             Caused by: org.hibernate.exception.JDBCConnectionException
                Caused by: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException
                     Caused by: java.net.ConnectException

Тестовый класс и метод обслуживания:

//Service class method

@Transactional(readOnly=true) 
public List<Object> fetchSomeData() {
    sampleDao.fetchSomeData();
    //light weight processing code
    //return processed list
}

//Test class

@RunWith(SpringRunner.class)
@SpringBootTest
@Transactional
@ActiveProfiles
public class ServiceTest {

    @Autowired
    private Service service;

    @MockBean
    private SampleDao sampleDao;

    @Test
    public void serviceTest() {
        when(sampleDao.fetchSomeData()).thenReturn(new ArrayList<Object>());
        List<Object> result = service.fetchSomeData();
        //Assert processed data returned
    }

}

Как это исправить?

1 Ответ

2 голосов
/ 17 июня 2020

Вы можете написать модульный тест следующим образом:

@RunWith(MockitoJUnitRunner .class)
public class ServiceTest {

    private Service service;

    @Before
    public void setUp() {
        service = new Service();
    }

    @Mock
    private SampleDao sampleDao;

    @Test
    public void serviceTest() {
        when(sampleDao.fetchSomeData()).thenReturn(new ArrayList<Object>());

        List<Object> result = service.fetchSomeData();

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