Groovy Spock Как подключить или смоделировать Spring Autowired Interface - PullRequest
0 голосов
/ 13 декабря 2018

У меня есть такой класс

public abstract class JobProcessor {
    @Autowired
    ApplicationContext applicationContext;
    protected void startProcess() {
        MyThread myThread= (MyThread) applicationContext.getBean("myThread");
        myThread.setConversionObject(new MyObject());
        ...
    }
}

Я хочу написать модульный тест для JobProcessor.JobProcessor является абстрактным классом, и он автоматически соединяется с ApplicationContext, который является интерфейсом.

Мой тест подобен этому

@SpringBootTest(classes = JobProcessorApplication.class)
@ContextConfiguration(locations = "classpath:InjectionContext.xml")
@TestPropertySource(locations = "classpath:test.properties")
@Import(UnitTestConfiguration)
class JobProcessorSpec extends Specification {
    class JobProcessorChild extends JobProcessor {

        @Override
        boolean processRequest() {
            return false
        }

        def "Should start process"() { 
            given: 
            def jobProcessorChild = new JobProcessorChild()
            when:
            jobProcessorChild.startProcess()
            then:
            noExceptionThrown()
        }
    }
}

Мой тест всегда завершается ошибкой для нулевой точки приложения applicationContext Может кто-нибудь, пожалуйста, руководствомне, как правильно написать модульный тест здесь?

1 Ответ

0 голосов
/ 13 декабря 2018

Модульные тесты должны выполняться без построения applicationContext.Вы должны заменить его на фиктивный объект, который затем передадите в конструктор вашего объекта в тесте.

...