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

在构造函数中传递实对象和模拟对象

丁星火
2023-03-14

我有一个如下所示的Account t细节构造函数。

private final AccountDetailsRestClient accountDetailsRestClient;
private final ConstantMapService constantMapService; 

private CalculationMap calculationMap;

public AccountDetails(final AccountDetailsRestClient accountDetailsRestClient, final ConstantMapService constantMapService) {
    this.accountDetailsRestClient = accountDetailsRestClient;
    this.constantMapService = constantMapService;
    initializeConstantsData();
}

private void initializeConstantsData() {
    if (this.calculationMap == null) {
        this.calculationMap = constantMapService.getMap(java.time.LocalDate.now());
    }
}

使用Mockito,我无法初始化所有3个对象accountDetailsRestClient、constantMapService和calculationMap。如果accountDetailsRestClient不为null,则constantMapService为null,反之亦然。

Mockito测试类:

@RunWith(MockitoJUnitRunner.class)
    public class AccountDetailsTest {
    
        @Mock
        private AccountDetailsRestClient accountDetailsRestClient;
    
        @Mock(answer = RETURNS_DEEP_STUBS)
        private CalculationMap calculationMap;
    
        @InjectMocks
        private final AccountDetails sut = new AccountDetailsTestImpl(new ConstantMapServiceMock());

       @Test
        public void testMethod() {
            //left it blank to check constructor issue first
        }
    
        class AccountDetailsTestImpl extends AccountDetails {
            AccountDetailsTestImpl(final ConstantMapService constantMapService) {
                    super(accountDetailsRestClient, constantMapService);
                }
            }
    
    }

但是accountDetailsRestClient现在在构造函数中为null。

我如何在不使用PowerMock的情况下解决这个问题。要么通过更改类中的代码,要么通过更改mockito测试类?

共有1个答案

国俊艾
2023-03-14

不要使用@InjectMocks简单地用手做事,就像你几乎已经做到的那样:

AccountDetails sut = new AccountDetails(mockDependency, realObject);
 类似资料:
  • 我有以下课程布局: 我正在为服务创建一个单元测试,但我想将ServiceHelper用作一个“活动”类,但要模拟ServiceHelper中的构造函数参数。有没有办法通过Mockito实现这一点?

  • 我创建了一个Author对象,用于构造函数的方法签名:public Book但是,我所做的赋值要求将Author(实例变量)更改为。当然,现在我以前的构造函数不行了。这是密码 如果我上传的方式不令人满意,我对任何不便表示歉意。我还没有学会使用堆栈溢出。 谢谢!

  • 我试图使一个用户类和使用类来处理登录,但从某种原因我的用户类构造函数是读取我的mysqli对象作为一个字符串 这是我的密码 Class.php mysql.php checklogin.php 它给了我这个错误 可捕获的致命错误:在第13行的C:\wamp\www\class.php中,类mysqli的对象无法转换为字符串 我要把头发拔出来了,有什么想法吗?

  • 类 类是对某一事物的抽象描述,具体地讲,类是C++中的一种构造的数据类型。它即可包含描述事物的数据,又可包含处理这些数据的函数,类在程序运行时是被用作样板来建立对象的。所以要建立对象,首先必须定义类。 定义类 定义一个类的一般格式为: class 类名{     private:         成员表1;     public:         成员表2;     protected:     

  • 映射对构造函数没有限制或要求 (__init__ )类的方法。您可以自由地为您想要的函数要求任何参数,为ORM未知的实例分配属性,并且通常在编写Python类的构造函数时做您通常会做的任何其他事情。 sqlAlchemy ORM不调用 __init__ 从数据库行重新创建对象时。ORM的过程有点类似于Python标准库的 pickle 模块,调用低级 __new__ 方法,然后在实例上悄悄地恢复属

  • 问题内容: 大家晚上好。 当尝试将一个对象传递给另一个对象构造函数时,我似乎遇到了一个奇怪的问题,该对象的构造函数也依赖于要传递给它的对象。 例如,使用以下示例: 但是,在构造ToolBar时,它将返回NullPointerException。当然,这是因为尚未构建webPanel并且需要它。 减速和初始化都必须保留在同一类(称为BuildUI)中,因为这是我设置属性的地方。(对于ToolBar创