java - Mockito:检测何时调用私有(private)资源上的方法

标签 java mockito

我需要为这个类编写一个测试。我需要验证当列表的大小恰好为 2 时,会调用 modelService.save。是否也可以获取对象productModel?

我不知道从哪里开始。

public class SoldMaterialPrepareInterceptor implements PrepareInterceptor<SoldMaterialModel> {

    @Resource
    private ModelService modelService;

    @Override
    public void onPrepare(SoldMaterialModel soldMaterialModel, InterceptorContext interceptorContext) throws InterceptorException {
            setSAPSubstance(soldMaterialModel);
    }

    private void setSAPSubstance(SoldMaterialModel soldMaterialModel) {
        ProductModel productModel = soldMaterialModel.getBaseProduct();
        Set superCatagoriesList = [....]// gets the list somehow
        if (superCatagoriesList.size() == 2) {
            productModel.setSupercategories(superCatagoriesList);
            modelService.save(productModel);
        }
    }
}

最佳答案

modelService 字段是私有(private)的不是问题,它是一个类字段,通常需要私有(private)访问修饰符。您需要检查其 save() 方法的调用,该方法又不能是私有(private)的,否则无法从拦截器类中调用它。

对于测试,假设 superCatagoriesList(实际上是一个 Set 而不是 List,也应该是通用的)从 sellMaterialModel 参数直接或间接(例如通过 ProductModel)获取其内容,您的任务是编写一个测试,它用这样的值填充 sellMaterialModel ,以便 superCatagoriesList.size() 将为 2,然后您可以验证 modelService.save() 方法是否被调用一次,例如类似的东西

Mockito.verify(modelService).save(any(ProductModel.class));

关于java - Mockito:检测何时调用私有(private)资源上的方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44783775/

相关文章:

java - 如何使用 Mockito 模拟 Java Path API?

java - 添加附加 stub 时调用第一个 stub

java - Mockito:使用 List<String> 作为参数

java - Scala 中 '+' 、 '*' 、 '/' (算术运算符)等基本方法的实现在哪里?

java - 循环中的 Runtime.getRuntime().exec()

java - 当我有 PIVOT 时,使用 JPA 如何在 native 查询中设置参数

安卓单元测试: How to mock an object which contains MutableLiveData but only exposes LiveData?

java - PowerMock模拟创建泛型类的新对象

java.lang.RuntimeException : Unable to start activity and skipping frames 错误

java - 如何获取设备用户的电子邮件地址?