gpt4 book ai didi

java - 使用 Mockito 使用 @Value 时如何模拟 map

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

我已经回答了这个问题:How do I mock an autowired @Value field in Spring with Mockito? .我们如何模拟以下内容?

@Value("#{${patientTypes}}")
private Map<String, Integer> patientTypes;

以便我们在进行模拟时可以访问它的值?

最佳答案

如果你只是想模拟你的 map 并将它注入(inject)你的被测类,你应该创建一个模拟 map 并通过 ReflectionTestUtils 注入(inject)它:

被测类:

@Component
public class MyService {

@Value("#{${patientTypes}}")
private Map<String, Integer> patientTypes;

public Integer getPatientTypeByKey(String key) {
return patientTypes.get(key);
}
}

对于 Mockito-test,您可以只使用 InjectMocks:

@ExtendWith(MockitoExtension.class)
public class SimpleTest {

@InjectMocks
private MyService underTest;

@Mock
private Map<String, Integer> mockMap;


@Test
public void test() {
when(mockMap.get(anyString())).thenReturn(15);

Integer result = underTest.getPatientTypeByKey("some key");

assertEquals(15, result);
}
}

对于SpringBootTest可以使用ReflectionTestUtils:

@SpringBootTest
public class SBTest {

@Autowired
private MyService underTest;

@Mock
private Map<String, Integer> mockMap;


@Test
public void test() {
ReflectionTestUtils.setField(underTest, "patientTypes", mockMap);

when(mockMap.get(anyString())).thenReturn(15);

Integer result = underTest.getPatientTypeByKey("some key");

assertEquals(15, result);
}
}

关于java - 使用 Mockito 使用 @Value 时如何模拟 map ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69113265/

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