使用 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中文网其他相关文章!