[英]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.