我有一个抽象的类,里面有很多带有业务逻辑的方法。在编写Junit时,我通过创建带有对实际方法的调用的Mock来测试抽象类。在我的Junit中,我不想创建一个具体的类来测试抽象类方法,因为这样我的Junit测试用例就会得到一些我不想要的行为。
我用它来实现一个mock来调用我的抽象类。Mockito.mock(AbstractService.class,Mockito.CALLS_REAL_METHODS)
但我的问题是,我的抽象类有太多自动连接的依赖项。子类是@component
类。现在,如果它不是一个抽象类,我会使用@InjectMocks来注入这些模拟依赖项。但是如何将mock添加到我上面创建的这个实例中。
在此处简化代码版本/
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()
}
}
发布于 2021-01-08 18:45:26
只需为父类单独添加注入模拟
@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.*;
https://stackoverflow.com/questions/65634167
复制相似问题