我有一个为创建 s3 客户端、获取数据以解析它的函数编写的 JUnit 测试。 所以,我有一个名为M,P和M的测试类MTest的类。MTest有注释
@RunWith(MockitoJUnitRunner.class)
在上面。P 的对象是 M 中的成员变量。 我在测试类中定义了变量,如下所示
@InjectMocks
private M MObj;
@Mock
private P PObj;
在我的设置(@Before)功能中,我有
when(PObj.processInputFile(any(), anyInt())).thenReturn(**something**);
在实际实现中,processInputFile 的第一个输入是来自 S3 的输入流,它涉及创建 s3 客户端并进行网络调用,这就是我使用 when.thenReturn 函数来模拟单元测试功能的原因。
Pobject.processInputFile(**expressions evals new input stream from s3**, <some integer>)
当我使用上述配置运行测试时,我在实际的processInputFile函数中出现错误,因为它尝试从没有此类访问权限的服务器进行网络调用。
我的问题是 - 如果我的单元测试中有 any(),单元测试是否尝试评估实际代码中的表达式,以便将其与 any() 对象进行比较。
如果不是,当我显式模拟函数时,单元测试尝试评估表达式的原因可能是什么。
如果是,有没有办法解决这个问题,并让单元测试不计算实际代码中的表达式。
如果该方法final
则执行该方法,因为默认情况下 Mockito 无法模拟最终方法。