簡體   English   中英

如何在 Mockito.Mock() 之后注入 Mock

[英]How to inject Mock after Mockito.Mock()

我有一個抽象的 class ,其中包含許多具有業務邏輯的方法。 在編寫 Junits 時,我正在通過調用真實方法創建其 Mock 來測試抽象 class。 In my Junit, I don't want to create a concrete class to test abstract class method, because then my Junit test case will get some behavior that I don't want.

我正在使用它來實現一個模擬來調用我的抽象 class。 Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS)

但我的問題是,我的抽象 class 有很多自動裝配的依賴項。 子類是@component 現在,如果它不是抽象的 class,我會使用 @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()
          }
     }

只需為父 class 添加注入模擬

@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.*;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM