繁体   English   中英

Mockito-内部方法调用

[英]Mockito - internal method call

我有一个名为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 Spying的文章。

如果在测试期间不必执行getStockLevelLimit() ,则意味着您要以某种方式模拟要测试的类。
这样做会降低所测试行为的相关性和真实性。

您应该模拟依赖关系,而不是模拟测试类的内部方法。
我想您不想执行getStockLevelLimit()因为它使用了您想隔离的外部依赖项或类似的东西。
因此,您应该模拟并隔离getStockLevelLimit()后面的内容,而这并不直接成为Availability类的一部分。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM