当前位置: 首页 > 面试题库 >

使用Mockito的通用“ any()”方法

洪雅健
2023-03-14
问题内容

我有一个接口,该方法需要一个数组Foo

public interface IBar {
  void doStuff(Foo[] arr);
}

我正在使用Mockito嘲笑此接口,我想断言该接口已doStuff()被调用,但是我不想验证传递了什么参数-“无关”。

如何使用any()通用方法代替编写以下代码anyObject()

IBar bar = mock(IBar.class);
...
verify(bar).doStuff((Foo[]) anyObject());

问题答案:

从Java 8开始,您可以使用无参数any方法,并且类型参数将由编译器推断:

verify(bar).doStuff(any());

说明

Java 8中的新事物是表达式的
目标类型

将用于推断其子表达式的类型参数。在Java 8之前,仅在大多数情况下用于类型参数推断的方法的参数。

在这种情况下,的参数类型doStuff将是的目标类型any(),并且any()将选择的返回值类型以匹配该参数类型。

此机制主要是在Java 8中添加的,目的是能够编译lambda表达式,但通常会改进类型推断。

原始类型

不幸的是,这不适用于原始类型:

public interface IBar {
    void doPrimitiveStuff(int i);
}

verify(bar).doPrimitiveStuff(any()); // Compiles but throws NullPointerException
verify(bar).doPrimitiveStuff(anyInt()); // This is what you have to do instead

问题在于,编译器将推断Integer为的返回值any()。Mockito不会意识到这一点(由于类型擦除),并返回引用类型的默认值null。在将返回值intValue传递给之前,运行时将尝试通过调用返回值的方法来取消对返回值的装箱doStuff,并引发异常。



 类似资料:
  • 本文向大家介绍Python any()函数的使用方法,包括了Python any()函数的使用方法的使用技巧和注意事项,需要的朋友参考一下 描述: 如果iterable的任何元素为true,则返回true。如果iterable为空,则返回false。相当于: 意思是:判断一个tuple或者list是否全部为空、0、False。如果全为空、0、False,则返回False;如果(只要有非[空或0或F

  • 问题内容: 我正在使用Mockito 1.9.5。我有以下代码: 我收到一句编译错误: 但是,当我使用模拟方法时,不会出现错误。谁能告诉我怎么回事?使用该方法时为什么会出现错误?当第三方提供且无法修改时,还有其他方法可以解决此问题吗? 问题答案: 编辑 :从Mockito 1.10.x开始,嵌入在类中的泛型类型现在由Mockito用于深层存根。即。 Mockito尽最大努力获取编译器嵌入的类型信息

  • 使用mockito模拟一个方法会确保永远不会调用被模拟的方法吗?我有一个主类,它包含一些我想为其编写单元测试的代码,还有一个单元测试类MainTest,它包含主类的单元测试。 eg: 源类: JUnit测试(使用mockito) 这项测试失败了。为什么?

  • 我有以下代码 我对嘲笑不熟悉。我有以下疑问。我正在尝试测试公共方法。 我是否可以断言私有变量workDone的值? 是否可以验证超类中的方法调用? 如何在方法中模拟私有方法调用?

  • 因此,我使用Spring-Boot2.1.6并集成kafka consumer来使用在该主题上发布的任何类型的消息。作为参考,我在https://docs.spring.io/spring-boot/docs/2.1.6.release/reference/htmlsingle/ 所以我在POM中有依赖性: 我正在application.yml中进行配置

  • 我想通过模拟class的重写方法a1方法2来测试我的服务。我不想更改课程A1和B1中的任何内容。我使用的是mockito 1.9.0和powermockito 1.4.12。我正在尝试以下代码: UnitTestService类: 服务级别: A1类: B1级: 我正在eclipse中使用testNG运行类UnitTestService。在这里,B1类a1Method2中的实际方法在控制台中打印“