Dil*_*sha 5 java unit-testing dependency-injection ejb mockito
我在嘲笑一个抽象类,如下所示:
myAbstractClass = Mockito.mock(MyAbstractClass.class, Mockito.CALLS_REAL_METHODS);
问题是MyAbstractClass
通过EJB
批注注入了一些依赖项,而没有设置器。有没有办法注入依赖项?
@InjectMocks
不适用于Abstract类。
小智 5
我为此使用junit5。
new abstractClass()
我所做的是用in实例化抽象类,如果该方法不是抽象的,则@BeforeEach
调用方法(使用它是因为我有方法),之后我用来在抽象类中设置模拟并测试每个方法并且工作得很好出色地。我留下一个有效的简单例子。super
protected
ReflectionUtils.setField()
抽象类
public abstract class AbstractClass {
@Autowired
private Environment environment;
protected String getProperty(String property){
return environment.getRequiredProperty(property);
}
}
Run Code Online (Sandbox Code Playgroud)
抽象类测试
@ExtendWith(MockitoExtension.class)
class AbstractClassTest {
AbstractClass abstractClass;
@Mock
Environment environment;
@BeforeEach
void setUp() {
abstractClass = new AbstractClass() {
@Override
public String getProperty(String property) {
return super.getProperty(property);
}
};
ReflectionTestUtils.setField(abstractClass, "environment", environment);
}
@Test
void shouldReturnProperty() {
String propertyValue = "this property";
when(environment.getRequiredProperty("property")).thenReturn(propertyValue);
String property = abstractClass.getProperty("property");
assertEquals(propertyValue, property);
}
}
Run Code Online (Sandbox Code Playgroud)
这只是使用mockito和junit5来测试。请记住ReflectionUtils
在实例化类后调用new AbstractClass()
,否则不会注入模拟。
欢迎对此实施的任何改进:D。
由于您无法实例化抽象类,因此无需测试。我建议您创建子类(它可以是测试类中的嵌套类),然后以这种方式运行测试。@Mock
然后您可以像平常一样使用@InjectMocks
。