首页 > Java > java教程 > 如何在 Mockito 中选择性 Mock 方法进行部分 Mock?

如何在 Mockito 中选择性 Mock 方法进行部分 Mock?

Patricia Arquette
发布: 2024-12-20 20:11:10
原创
914 人浏览过

How Can I Selectively Mock Methods in Mockito for Partial Mocking?

使用 Mockito 进行选择性方法模拟

Mockito 在模拟类中的特定方法方面提供了灵活性。通过利用部分模拟,开发人员可以选择要重写哪些方法,同时保持其他方法不变。

例如,考虑一个 Stock 类,其方法为 getPrice()getQuantity()getValue()。您可能希望模拟前两个方法的返回值,但让 getValue() 保留其原始行为。

在 Mockito 中使用部分模拟,您可以实现这种精度。 Stock 对象被实例化为模拟,同时为 getPrice()getQuantity() 设置特定的期望。下面是一个示例:

Stock stock = mock(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
登录后复制

通过为 getValue() 调用 thenCallRealMethod(),您可以保留其实际实现:

when(stock.getValue()).thenCallRealMethod();
登录后复制

或者,间谍可以是使用,其中所有方法最初都引用实际实现。只有那些明确存根的方法才会采用改变的行为。这是间谍方法:

Stock stock = spy(Stock.class);
when(stock.getPrice()).thenReturn(100.00);
when(stock.getQuantity()).thenReturn(200);
登录后复制

请注意,使用间谍时,避免在存根方法中调用真实方法至关重要。

还有另一个选项涉及 Mockito.CALLS_REAL_METHODS 标志:

Stock MOCK_STOCK = Mockito.mock( Stock.class, CALLS_REAL_METHODS );
登录后复制

这种方法将未存根的方法委托给它们的实际方法

但是,在给定的 Stock 示例中,由于 getValue()price 的依赖性,此部分模拟策略仍可能失败直接数量,而不仅仅是在它们的吸气剂上。

此外,在以下情况下考虑完全避免模拟:可能:

Stock stock = new Stock(100.00, 200);
double value = stock.getValue();
assertEquals("Stock value not correct", 100.00*200, value, .00001);
登录后复制

以上是如何在 Mockito 中选择性 Mock 方法进行部分 Mock?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板