我有一个称为Availability.java
的类,有两种方法。
public Long getStockLevelStage() {
//some logic
getStockLevelLimit();
}
public Long getStockLevelLimit() {
String primaryOnlineArea = classificationFeatureHelper.getFirstFeatureName(productModel, FEATURE_CODE_PRODUCT_ONLINE_AREA_PRIMARY, language);
................
return new Long();
}
我正在写一个单元测试类AvailabilityTest.java
。
@RunWith(MockitoJUnitRunner.class)
public class AvailabilityTest {
@InjectMocks
private Availability availability = new Availability();
@Test
public void testGetStockLevelStage() {
availability.getStockLevelStage();
}
}
当我调用availability.getStockLevelStage()
方法时,它调用getStockLevelLimit()
方法。是否可以模拟内部方法调用?
在这种情况下,我不希望执行getStockLevelLimit()
,当getStockLevelStage()
执行时。
请帮助。
尝试以下:
@RunWith(MockitoJUnitRunner.class)
public class AvailabilityTest {
@InjectMocks
@Spy
private Availability availability = new Availability();
@Test
public void testGetStockLevelStage() {
Mockito.doReturn(expectedLong).when(availability).getStockLevelLimit();
availability.getStockLevelStage();
}
}
如果您需要进一步阅读,这是我写的有关Mockito间谍的文章。
如果在测试期间不执行getStockLevelLimit()
,则意味着您要在某种程度上嘲笑正在测试的类。
这样做可以降低所测试行为的相关性和真实性。
您应该模拟依赖项,而不是测试类的内部方法。
我想您不想执行getStockLevelLimit()
,因为它使用了要分离的外部依赖性或类似的依赖。
因此,您应该嘲笑和隔离getStockLevelLimit()
后面,这不会直接成为Availability
类的一部分。