spring - 仅模拟被测类中的某些字段
问题描述
我有一个正在测试的课程。例如
@Service
public classs AService {
@Autowired
Field1 field1;
@Autowired
Field2 field2;
void foo() { // .... }
}
我想嘲笑field1
但不是field2
。
我使用mockito如下
@RunWith(SpringRunner.class)
@SpringBootTest
public class AServiceTest {
@Mock
private Field1 field1;
@InjectMocks
private AService aService;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
}
@Test
public void fooTest() {
// setup mocking behaviour and test
}
但正如预期的那样,在这种情况下field2
测试运行时为空。请注意,这Field2
是 SpringBoot 转换为代码(例如 a Repository
)的接口,因此我不能/不想显式实例化它。
有什么想法吗?
解决方案
由于您使用的是 Spring Boot,因此@SpringBootTest
您无需担心自己使用@InjectMocks
. 只需将 field1 定义为 a @MockBean
,@Autowire
您的服务和 Spring boot 就会为您完成所有工作:
@RunWith(SpringRunner.class)
@SpringBootTest
public class AServiceTest {
@MockBean
private Field1 field1;
@Autowired
private AService aService;
@Test
public void fooTest() {
// setup mocking behaviour and test
}
推荐阅读
- python - 如何使用切片索引变量在 for 循环中切片数组
- python - Sentinel 5 Data - Problems in importing Basemap from mpl_toolkits.basemap in Python 3.7
- git - 如何让审阅者在功能测试完成时自动批准拉取请求?
- selenium - How to use Selenium executable jars and integrate them with Jenkins
- c# - 我想知道 Xamarin 表单是否支持 watchOS 应用程序?
- vb.net - Simulate partially pressed keys in VB.net
- python - 如何修复“TypeError:printSong() 缺少 1 个必需的位置参数:'self'”
- sql - Apache Ignite 中的简单 SELECT(*) 查询非常慢
- java - How to apply Aero-Snap to an borderless Stage
- html - 有没有办法让导航栏标志响应?