使用 Mockito 使用 @Value 时如何模拟地图
How to Mock Map when using @Value using Mockito
我已经回答了这个问题:How do I mock an autowired @Value field in Spring with Mockito?。我们如何模拟以下内容?
@Value("#{${patientTypes}}")
private Map<String, Integer> patientTypes;
以便我们在进行模拟时可以访问它的值?
如果你只想模拟你的地图并将其注入你的 class 测试中,你应该只创建一个模拟地图并通过 ReflectionTestUtils
:
注入它
Class 测试中:
@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);
}
}
对于SpringBootTestReflectionTestUtils
可以使用:
@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);
}
}
我已经回答了这个问题:How do I mock an autowired @Value field in Spring with Mockito?。我们如何模拟以下内容?
@Value("#{${patientTypes}}")
private Map<String, Integer> patientTypes;
以便我们在进行模拟时可以访问它的值?
如果你只想模拟你的地图并将其注入你的 class 测试中,你应该只创建一个模拟地图并通过 ReflectionTestUtils
:
Class 测试中:
@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);
}
}
对于SpringBootTestReflectionTestUtils
可以使用:
@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);
}
}