Не удается настроить Mock Class весной

Я иду на проект, который набор тестов интеграции. Один из этих тестов автоматически связал класс, который выполнял множество сетевых вызовов со сторонним поставщиком. Поскольку мы не хотели, чтобы наши тесты выполняли эти вызовы, команда сменила этого клиента с помощью файла конфигурации testApplicationContext.xml Spring.

Интеграционный тестовый класс:

@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("/testApplicationContext.xml")
@TransactionConfiguration(transactionManager="transactionManager", defaultRollback=true)
@Transactional
public class IntegrationTest {

Определение testApplication.xml:

<beans xmlns="http://www.springframework.org/schema/beans"
    xmlns:aop="http://www.springframework.org/schema/aop"
        http://www.springframework.org/schema/cache/spring-cache.xsd
        http://www.springframework.org/schema/jee
        http://www.springframework.org/schema/jee/spring-jee-3.1.xsd">

    <aop:aspectj-autoproxy />
    <context:component-scan base-package="com.mycompany" />
    <context:component-scan base-package="tst.mycompany.mocks"/>
    <import resource="mock-beans.xml"/>

Определение mock-beans.xml:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"...>
    <!-- Override bean definitions with mocks -->
    <bean id="thirdPartyClientService" class="tst.mycompany.mocks.MockThirdPartyClient" />
</beans>

Это прекрасно работает в нашей установке, и экземпляр MockThirdPartyClient автоматически подключается к нашему весеннему компоненту при запуске в качестве теста.

Однако недавно я добавил новый макет для другого сервиса в том же пакете, но не могу его загрузить. Я получаю ошибку:

Не удается найти класс [tst.mycompany.mocks.MockAdressService] для компонента с именем 'addressService', определенным в ресурсе пути к классу [mock-beans.xml]; Вложенное исключение - java.lang.ClassNotFoundException: tst.mycompany.mocks.MockAdressService

Вот обновленный mock-beans.xml:

<beans xmlns="http://www.springframework.org/schema/beans">
    <!-- Override bean definitions with mocks -->
    <bean id="thirdPartyClientService" class="tst.mycompany.mocks.MockThirdPartyClient" />
    <bean id="addressService" class="tst.mycompany.mocks.MockAdressService" />
</beans>

Вот как я автоматически подключаю исходную зависимость, которая работает:

@Autowired ThirdPartyClientServiceI client;

и тот, который не:

@Autowired AddressServiceI addressService;

Я дважды проверил правописание на всем, и все это выстраивается, поэтому это безумие, что это не работает. Я подумал, что, может быть, это было из-за того, что что-то было неправильно кэшировано... но я обновил и вычистил все и до сих пор без кубиков.

Ни у одного из этих макетов нет аннотаций FWIW, они просто реализуют интерфейс службы, для которой они предназначены. Они оба расположены под src/test/java папка.

package tst.mycompany.mocks;

public class MockAddressService implements AddressServiceI {

рассматриваемая стековая трасса:

Caused by: java.lang.ClassNotFoundException: tst.mycompany.mocks.MockAdressService
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381) ~[?:1.8.0_71]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424) ~[?:1.8.0_71]
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331) ~[?:1.8.0_71]
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357) ~[?:1.8.0_71]
    at org.springframework.util.ClassUtils.forName(ClassUtils.java:250) ~[spring-core-4.2.2.RELEASE.jar:4.2.2.RELEASE]

Я проверил папку bin и скомпилированный класс там.

1 ответ

Решение

Это неловко, но у меня была опечатка в моем определении bean-компонента в mock-beans.xml: MockAdressService должен быть MockAddressService (пропущен символ 'd')

Другие вопросы по тегам