Мой код выглядит следующим образом:
public class RealWorldBoImpl extends AbstractBoImpl<T> implements SomeBo{}
И
@RunWith(PowerMockRunner.class)
@PrepareForTest({RealWorldBoImpl.class})
public class RealWorldBoImplTest {
@InjectMocks
private RealWorldBoImpl realWorldBo;
@Mock
private RealWorldDAO realWorldDAO;
@Test
public void changeStatusMainSubString() throws Exception {
long id = 1L;
}
В этом случае realWorldDAO не может внедрить realWorldBo.Но когда я удаляю PrepareForTest, он работает.
Я также пробовал другие классы, они работали хорошо.Кажется, RealWorldBoImpl особенный, что при подготовке к нему он не будет корректно вводить макеты.
Я отладил этот код и обнаружил, что в org.mockito.internal.util.reflection.FieldInitializer # checkParameterized конструктор.getParameterTypes () не является пустым и имеет конструктор с классом IndicateReloadClass.
private void checkParameterized(Constructor<?> constructor, Field field) {
if(constructor.getParameterTypes().length == 0) {
throw new MockitoException("the field " + field.getName() + " of type " + field.getType() + " has no parameterized constructor");
}
}
Но я не знаю, что особенного в RealWorldBoImpl.Он просто расширяет родительский класс и реализует интерфейс.Имеет ли это значение?