При запуске тестового класса выдается следующее исключение:
BeanNotOfRequiredTypeException: Bean named 'myServiceImpl' is expected to be of type 'MyServiceImpl' but was actually of type 'com.sun.proxy.$Proxy139'
Эта ошибка вызывается только при модульных тестах, сама программа работает.
Мой интерфейс
public interface MyService {
public String testMethod();
}
Моя реализация
@Service
public class MyServiceImpl implements MyService{
@Autowired
private TransactionRepository transactionRepo;
@Autowired
private AccountRepository accountRepository;
@Autowired
private BankAccountStatementFactory baStatementFactory;
public String myMethod() {
return "Run My Method";
}
}
Мой модульный тест
@RunWith(SpringRunner.class)
@SpringBootTest
public class DeleteMeTest{
@Mock
private TransactionRepository transactionRepo;
@Mock
private AccountRepository accountRepository;
@Mock
private BankAccountStatementFactory baStatementFactory;
@InjectMocks
@Resource
MyServiceImpl myService;
@org.junit.Before
public void setUp() throws Exception {
// Initialize mocks created above
MockitoAnnotations.initMocks(this);
}
@Test
public void test() {
myService.myMethod();
System.out.println("My Unit Test");
}
}
При запуске этого класса теста выбрасывается следующееисключение:
BeanNotOfRequiredTypeException: Bean named 'myServiceImpl' is expected to be of type 'MyServiceImpl' but was actually of type 'com.sun.proxy.$Proxy139'
Решение здесь состоит в том, чтобы ввести интерфейс, а не реализацию в модульный тест, но это не позволит мне вводить макеты.
Это потому, что требуется реализация с аннотацией @InjectMocks.Когда я пытаюсь внедрить макеты в интерфейс, я получаю следующее исключение:
Cannot instantiate @InjectMocks field named 'myService'! Cause: the type 'MyService' is an interface.
Просто чтобы прояснить, все это сработало в начале и пошло плохо, когда я переупаковал свои классы.Это может быть причиной, но не уверен на 100%.
Любые намеки на то, что может вызвать это BeanNotOfRequiredTypeException
?
Спасибо!