【发布时间】:2020-10-07 07:43:58
【问题描述】:
我想为一个带有 @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
}
}
如何解决这个问题?
【问题讨论】:
-
这不是您正在编写的单元测试,而是集成测试。如果要进行单元测试,请删除
@SpringBootTest和@RunWith。自己为 dao 创建一个 mock 并自己实例化服务。然后进行测试。
标签: java spring-boot hibernate junit service