gpt4 book ai didi

java - 无对象的 Mockito 方法调用

转载 作者:行者123 更新时间:2023-11-30 03:17:40 24 4
gpt4 key购买 nike

代码有类似

Speed speed = readSpeed(Point A, Point B);
isOverLimit = limitCheck.speedCheck(speed);

如何使用mockito提高读取速度?

Mockito.when(readSpeed(0, 0).then...

假设我应该使用类对象来调用它吗?

最佳答案

Mockito 通过创建单独的对象子类来有效地工作,这些子类将每个可重写的实现委托(delegate)给模拟框架。

因此,您不能使用 Mockito 模拟您的方法 (readSpeed),同时使用所有实例在测试系统中创建的实例,也不模拟任何静态或 final方法。如果 readSpeed 是其中任何一个,或者需要在测试中未触及的实例上进行模拟,Mockito 将不适合您;您需要重构,或使用 PowerMockito (它会悄悄地重写您的测试系统,以将构造函数、最终调用和静态调用重定向到 Mockito 的框架)。

如果 readSpeed 是您测试的系统上的公共(public)非最终实例方法,那么您可以模拟它,这将被称为部分模拟您的组件。部分模拟可能很有用,但也可以被视为“代码味道”(如 Mockito documentation 中提到的):理想情况下,您的测试类应该是要测试的原子单元,并且模拟应该针对周围的依赖项进行。 em> 你的被测系统而不是你的测试本身。否则,您可能会太容易测试规范或测试模拟框架,而不是测试您的组件。

虽然更好的做法是将类拆分为更小的互连组件,但您可以在 Mockito 中使用部分模拟,如下所示:

@Test public void componentChecksSpeed() {
YourComponent yourComponent = Mockito.spy(new YourComponent());

// Use doReturn, because the when syntax would actually invoke readSpeed.
doReturn(65).when(yourComponent).readSpeed(any(Point.class), any(Point.class));

yourComponent.run();
}

关于java - 无对象的 Mockito 方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32187209/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com