Mockito Mocking 在功能测试期间没有按预期工作

Mockito Mocking not working as expected during functional test

我有两个 classes 比方说 classA 和 classB。 classA 调用 classB 中的方法,使用 DaoClass 在数据库中保存一些值。

我必须测试这些值是否已保存在数据库中。

@Mocks
private DaoClass dao;

@Mocks
private ClassB B;

@InjectMocks
private ClassA A;

A.someMethod(someArgument);
verify(B).someOtherMethod(someOtherArgument);
verify(dao).save(theCorrectValue);

这不能说明与此模拟的交互为零。需要但未调用 dao.save()。而 B.someOtherMethod() 被调用。

我是开发和测试的新手,我的理解是我只需要在我的第一个 class 中模拟调用一个方法,然后该调用将像正常调用一样进行,并且所有方法中的所有方法其他 classes 将被正常调用。但是好像只调用了classB中的一个方法,然后在classB中什么都不做。例如,我通过在整个 ClassB:

创建断点进行调试
ClassB someOtherMethod{
SomeCode;
SomeCode;
dao.save();
someCode;
return Something; }

在调试器中我可以看到它转到 ClassB someOtherMethod() 但之后它跳过所有代码并转到 return 语句。我错过了什么吗?我需要查看一些文件吗?

你必须

  1. 存根 ClassB someOtherMethod。请注意,如果您未指定任何模拟依赖项的 return 值(使用 when()),它将 return 为 return 类型的默认值 - 对于对象为 null, 0 表示原始数字,false 表示布尔值,等等。这就是为什么在调用 someOtherMethod 时必须得到 Null 的原因。
  2. 使用 Spy 而不是 Mock。如果你想调用外部服务并执行真正依赖的调用,或者简单地说,你想 运行 程序原样,只是存根特定方法,然后使用 spy.