如何解决如何在 Mockito.Mock() 之后注入 Mock
我有一个抽象类,其中包含许多具有业务逻辑的方法。 在编写 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()
}
}
解决方法
只需为父类单独添加注入模拟
@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.*;
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。