gpt4 book ai didi

spring-boot - 将@SpyBean 与@Qualifier Spring Boot 测试一起使用

转载 作者:行者123 更新时间:2023-12-04 03:12:30 32 4
gpt4 key购买 nike

我的应用程序中有 2 个 DataSource

因此,为了获得所需的JdbcTemplate,我使用了@Qualifier。但是,当我像下面那样做时,测试会运行……但如果在“测试方法”中使用了 JdbcTemplate,则会无限期地等待。

@Service
@Transactional
public class SampleDatabaseService {

@Autowired
@Qualifier("firstDbJdbcTemplate")
private JdbcTemplate firstDbJdbcTemplate;

@Autowired
@Qualifier("secondDbJdbcTemplate")
private JdbcTemplate secondDbJdbcTemplate;

@Cacheable("status")
public Map<String, Device> readAllValidDeviceStatus() {
Map<String, Device> allDeviceStatuses = new HashMap<>();
//Stops at below line indefinitely if "SpyBean" is used
List<StatusDetail> statusDetails = firstDbJdbcTemplate
.query(SqlQueries.READ_DEVICE_STATUS, BeanPropertyRowMapper.newInstance(StatusDetail.class));

statusDetails
.stream()
.filter(deviceStatus -> deviceStatus.getName() != "Some Invalid Name")
.forEach(deviceStatus -> allDeviceStatuses
.put(deviceStatus.getName(), buildDevice(deviceStatus)));
return allDeviceStatuses;
}

/** More Stuff **/

}

测试:

@RunWith(SpringRunner.class)
@SpringBootTest(webEnvironment = SpringBootTest.WebEnvironment.RANDOM_PORT)
@Transactional
@Rollback
@ActiveProfiles("test")
public class SampleDatabaseServiceTest {

@SpyBean
@Qualifier("firstDbJdbcTemplate")
private JdbcTemplate firstDbJdbcTemplate;

@Autowired
private SampleDatabaseService serviceUnderTest;

@Before
public void populateTables() {
//Insert some Dummy Records in "InMemory HSQL DB" using firstDbJdbcTemplate
}


@Test
public void testReadAllValidDeviceStatus() {
// When
Map<String, Device> allDeviceStatuses = serviceUnderTest.readAllValidDeviceStatus();

// Then
assertThat(allDeviceStatuses).isNotNull().isNotEmpty();
// More checks
}
/* More Tests */
}

但是,当我在 Test 中将 @SpyBean 替换为 @Autowired 时,它工作正常。

为什么会这样?任何帮助是极大的赞赏。 :)

最佳答案

按以下格式使用

  @MockBean(name = "firstDbJdbcTemplate") 
private JdbcTemplate firstDbJdbcTemplate;

关于spring-boot - 将@SpyBean 与@Qualifier Spring Boot 测试一起使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43930936/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com