【问题标题】:How to inject Mock after Mockito.Mock()如何在 Mockito.Mock() 之后注入 Mock
【发布时间】:2021-01-08 18:05:02
【问题描述】:

我有一个抽象类,其中包含许多具有业务逻辑的方法。 在编写 Junits 时,我正在通过调用真实方法创建其 Mock 来测试抽象类。 在我的 Junit 中,我不想创建一个具体的类来测试抽象类方法,因为这样我的 Junit 测试用例会得到一些我不想要的行为。

我正在使用它来实现一个模拟来调用我的抽象类。 Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS)

但我的问题是,我的抽象类有很多自动装配的依赖项。 子类是@component。现在,如果它不是一个抽象类,我会使用@InjectMocks 来注入这些模拟依赖项。但是如何向我在上面创建的这个实例添加模拟。

在此处简化代码版本/

abstract class AbstractService{

       @Autowired
       DependencyOne dp1;
        
       @Autowired
        private DependencyOne dp2;

     
       public void doSometingSpecial(){
          dp1.Dosomething(dp2.dosomethingElse())
         .....
         .....

     }
}

我的 Junit 是

@ExtendWith(SpringExtension.class)
@TestInstance(Lifecycle.PER_CLASS)
class AbstractServiceTest {

        @Mock
        private DependencyOne dp1;
        
        @Mock
        private DependencyOne dp2;

        .....
         .....

        @Test
        void testDirectCall_whenSomething_thenSomerhing(){
               AbstractService service =    Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS);

        //How to inject dep1 and dp2 mock to write junit for doSometingSpecial()
          }
     }

【问题讨论】:

    标签: junit mockito junit5 junit5-extension-model


    【解决方案1】:

    只为父类添加注入模拟

    @InjectMocks
    AbstractService abstractService;
    

    内部测试方法给出,

     @Test
     void testDirectCall_whenSomething_thenSomerhing(){
     when(myAbstractClass.doSometingSpecial()).thenReturn("good");
      Assert.assertEquals("good",myAbstractClass.doSometingSpecial());
      }
    

    不需要

    AbstractService service =    Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS);
    

    在导入时请添加 import static org.mockito.Mockito.*;

    【讨论】:

    • 这行不通,正如我所说..我需要测试抽象类....你所做的是嘲笑测试目标类本身.......我在嘲笑它因为它的抽象所以不能实例化......我需要能够调用这个类上的方法......所以 CALLS_REAL_METHODS 需要在模拟期间作为参数传递......
    猜你喜欢
    • 2017-10-27
    • 2014-06-27
    • 1970-01-01
    • 2019-03-24
    • 1970-01-01
    • 2013-11-17
    • 2013-08-30
    • 1970-01-01
    • 2023-03-12
    相关资源
    最近更新 更多