java - 如何告诉 Mockito 使用帮助类的真实(未模拟)版本?

标签 java spring junit mocking mockito

使用 Mockito,我习惯于将 Mocks 注入(inject)到单个被测类中,如下所示:

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest() {
    @InjectMocks
    private MyClass myClass;

    @Mock
    private OtherClass1 mockedClass1UsedByMyClass;

    @Mock
    private OtherClass2 mockedClass2UsedByMyClass;

但是假设 MyClass 也使用了一个简单的类 HelperClass,它提供了一些简单的“辅助”方法并且没有任何进一步的依赖:

public class MyClass {
    @Autowired
    private OtherClass1 otherClass1;

    @Autowired
    private OtherClass2 otherClass2;

    @Autowired
    private HelperClass helperClass; // Don't want to mock this one...

宁愿使用此类的真实版本,也不愿尝试模拟返回的所有内容,因为它所做的只是一些简单的、确定性的处理。有办法做到这一点吗?

最佳答案

如果你想利用 @InjectMocks 然后使用 @Spy .. 默认情况下,它将使用原始 impl,您可以手动选择要模拟的方法:

@RunWith(MockitoJUnitRunner.class)
public class MyClassTest() {
    @InjectMocks
    private MyClass myClass;

    @Mock
    private OtherClass1 mockedClass1UsedByMyClass;

    @Spy
    private HelperClass helperClass;

    @Mock
    private OtherClass2 mockedClass2UsedByMyClass;
}

关于java - 如何告诉 Mockito 使用帮助类的真实(未模拟)版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42646806/

相关文章:

java.io.FileNotFoundException :/target/test. 日志

java - Apache Camel - 拆分和聚合 - 旧交换始终为空

ScalaTest - 找不到 JUnitRunner

gradle - 为什么org.powermock:powermock-api-mockito:1.7.4依赖两个版本的Mockito-Core?

java - 删除 SHA1 证书 : Received fatal alert: bad_certificate. 服务器日志后出现 SSLHandshakeException:SEC_ERROR_REUSED_ISSUER_AND_SERIAL

java - JLabel 中的多行文本

java - 使用ANT自动切换JDK/JRE版本

java - 下一页的前向变量

spring - 单元测试 Spring ApplicationEvents - 事件正在发布但监听器没有触发?

java - 如何配置maven在新项目中添加junit 4.10而不是3.8依赖