在构造函数中使用mock



是否可以在构造函数中使用mock ?

Class A{
    public B b = new B();
    public A( String input ){
        //I need to stub this method
        b.someMethod( input );
    }
    // Class implementations
}
单元测试:

Class ATest{
    @Mock
    B b;
    @InjectMock
    A a;
    //option1:
    @Before
    setup(){
        MockitoAnnotations.initMocks( this ); //Fails - since A isnt instantiated
        a = new A();
    }
    //option2:
    @Before
    setup(){
        a = new A();
        MockitoAnnotations.initMocks( this ); // Fails in new A() due to method i want to stub as mocks werent initialized yet !
    }
}

我该怎么做呢?

这种设计是难以模仿的,它揭示了被测类中可能存在的设计缺陷,或者至少是弱点。它可能会调用某种注入框架(例如Spring),因此您不会显式调用B构造函数。然后,您的第二次测试尝试将在

上进行。

如果Spring太重,还有更轻的注入框架。或者最后,您可以将B作为a的构造函数参数传入,然后您必须在将B传递给a构造函数之前使用Mockito.mock(B类)来生成B模拟(然后您将放弃使用mockitto注释)。

我不明白你到底想做什么,但你的第二种方法是正确的。只有您需要像实例化A类一样实例化B类。所以,基本上这就是你需要做的:

//option2:
@Before
setup(){
a = new A();
b = new B();
MockitoAnnotations.initMocks( this ); // Fails in new A() due to method i want to stub as       mocks werent initialized yet !
 }
}

相关内容

  • 没有找到相关文章

最新更新