use*_*006 5 java junit unit-testing mockito spy
我有一个叫做的类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();
}
Run Code Online (Sandbox Code Playgroud)
我正在写一个单元测试课AvailabilityTest.java.
@RunWith(MockitoJUnitRunner.class)
public class AvailabilityTest {
@InjectMocks
private Availability availability = new Availability();
@Test
public void testGetStockLevelStage() {
availability.getStockLevelStage();
}
}
Run Code Online (Sandbox Code Playgroud)
当我调用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();
}
}
Run Code Online (Sandbox Code Playgroud)
如果您需要进一步阅读,这是我写的关于Mockito Spying的文章。
如果getStockLevelLimit()在测试期间没有执行,则意味着你想以某种方式模拟被测试的类.
这样做会降低测试行为的相关性和真实性.
您应该模拟依赖项而不是测试类的内部方法.
我想你不想执行,getStockLevelLimit()因为它使用你想要隔离的外部依赖或类似的东西.
因此,您应该模拟并隔离背后的内容getStockLevelLimit(),而不是直接成为Availability课程的一部分.
| 归档时间: |
|
| 查看次数: |
7750 次 |
| 最近记录: |