当前位置: 首页 > 知识库问答 >
问题:

Mockito:模拟私有字段初始化

庞意智
2023-03-14
class Test {
    private Person person = new Person();
    ...
    public void testMethod() {
        person.someMethod();
        ...
    }
}

在这里,我想在测试test.testmethod()方法时模拟person.somemethod(),我需要模拟person变量的初始化。有线索吗?

编辑:我不允许修改Person类。

共有1个答案

锺离辰沛
2023-03-14

Mockito附带了一个帮助类,可以为您保存一些反射锅炉板代码:

import org.mockito.internal.util.reflection.Whitebox;

//...

@Mock
private Person mockedPerson;
private Test underTest;

// ...

@Test
public void testMethod() {
    Whitebox.setInternalState(underTest, "person", mockedPerson);
    // ...
}

更新:不幸的是,mockito团队决定删除Mockito2中的类。因此,您可以重新编写自己的反射样板代码,使用另一个库(例如Apache Commons Lang),或者简单地窃取Whitebox类(它是MIT许可的)。

更新2:JUnit5附带了自己的ReflectionSupport和AnnotationSupport类,这些类可能很有用,可以使您不必再使用另一个库。

 类似资料:
  • 有许多方法可以使用mockito初始化模拟对象。其中什么是最好的方法? 1. 建议我有没有比这些更好的方法...

  • 问题内容: 我在类中使用 私有静态最终LOGGER 字段,并且我希望 LOGGER.isInfoEnabled() 方法返回 false 。我如何通过使用Mockito或jMockit模拟静态的final字段 我的课是: 其junit为: 当我运行它的结果是: 我是jmockit的新手,我希望上述junit案例能够成功运行。而且我必须使用JMockit或Mockito,不能使用Powermocki

  • 我在我的类中使用私有静态final LOGGER字段,我希望LOGGER.isInfoEnabled()方法返回false。如何使用mockito或jMockit模拟静态final字段 我的课是: 当我运行它时,结果是: 我是jmockit新手,我希望上面的junit案例能够成功运行。我只能用JMockit或mockito,不能用powermockito。请帮帮忙。

  • 问题内容: 有很多方法可以使用MockIto初始化模拟对象。其中最好的方法是什么? 1。 2。 [编辑] 3。 如果有其他方法可以建议我… 问题答案: 对于模拟初始化,使用或是严格等效的解决方案。从MockitoJUnitRunner的javadoc中: 当你已经在测试用例上配置了特定的运行器时,可以使用第一个解决方案(带有)。 第二个解决方案(带有)更经典,也是我的最爱。代码更简单。使用转轮提供

  • 问题内容: IDK(是否重复),但我确定找不到相关项目。我一直期望这真的很简单,因为通过反射它非常简单,但是我宁愿使用正确的工具来完成它。 澄清:旧版代码。没有吸气剂/二传手。 为此使用Whitebox是否正确?我以为是“超限”,即内部API的一部分?…或者那是严格的Mockito吗? 问题答案: 请参阅。 例如-给定的类需要测试: 具有以下私有实例: 然后可以用来设置的私有状态,以便可以对其进行

  • } 当我做它将打印芒果,但它仍然在打印苹果。如果有人能帮助我只使用MOCKITO而不是PowerMock等。