我已经回答了这个问题: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/