Проблема:
Я использую Cucumber- JVM и Spring для интеграционных тестов. Класс с автоматическим связыванием в классе шагов тестирования не создается и имеет значение NULL.
< / TL;DR>
Тесты работают локально, но завершаются неудачно на сервере сборки с нулевым указателем при попытке вызова метода автоматически подключенного компонента.
Стек
- Java 1.8 (локальный сервер и сервер сборки)
- Maven 3.3.9 (локальный сервер сборки)
- Локальный: Windows 8, Сервер сборки: Ubuntu (не могу понять, есть ли в этом разница)
Класс проблемы аннотирован @Component , я попытался удалить аннотацию @Component и зарегистрировать ее в контексте Spring - это не дало никакого эффекта.
Установка уровня журнала Spring на DEBUG показала очень мало и не вызывала беспокойства. . Для тестов, использующих бегун Cucumber (@RunWith(Cucumber.class)), я вижу относительно мало журналов Spring. Почти нет по сравнению с несвязанными тестами, использующими SpringJunit4Runner.
Я написал тест, который использует SpringJunit4Runner вместо бегуна Cucumber и автоматически связывает проблемный класс, он работал нормально; к л а с с н е б ы л н у л е в ы м . < / p > < b r / > < b r / > < s t r o n g > К о д < / s t r o n g > < / p > < b r / > < b r / > P O M < / p > < b r / > < c o d e > & l t ; p r o j e c t x m l n s = " h t t p : / / m a v e n . a p a c h e . o r g / P O M / 4 . 0 . 0 " x m l n s : x s i = " h t t p : / / w w w . w 3 . o r g / 2 0 0 1 / X M L S c h e m a - i n s t a n c e " < b r / > x s i : s c h e m a L o c a t i o n = " h t t p : / / m a v e n . a p a c h e . o r g / P O M / 4 . 0 . 0 h t t p : / / m a v e n . a p a c h e . o r g / x s d / m a v e n - 4 . 0 . 0 . x s d " & g t ; < b r / > & l t ; m o d e l V e r s i o n & g t ; 4 . 0 . 0 & l t ; / m o d e l V e r s i o n & g t ; < b r / > & l t ; p a r e n t & g t ; < b r / > & l t ; g r o u p I d & g t ; c o m . f o o & l t ; / g r o u p I d & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; m a t c h i n g - e n g i n e & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 0 . 0 . 1 - S N A P S H O T & l t ; / v e r s i o n & g t ; < b r / > & l t ; / p a r e n t & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; c o r e & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; n a m e & g t ; c o r e & l t ; / n a m e & g t ; < b r / > & l t ; d e s c r i p t i o n & g t ; c o r e m a t c h i n g e n g i n e & l t ; / d e s c r i p t i o n & g t ; < b r / > < b r / > & l t ; b u i l d & g t ; < b r / > & l t ; p l u g i n s & g t ; < b r / > & l t ; p l u g i n & g t ; < b r / > & l t ; a r t i f a c t I d & g t ; m a v e n - c o m p i l e r - p l u g i n & l t ; / a r t i f a c t I d & g t ; < b r / > & l t ; v e r s i o n & g t ; 3 . 3 & l t ; / v e r s i o n & g t ; < b r / > & l t ; c o n f i g u r a t i o n & g t ; < b r / > 1.8
1.8
org.springframework
spring-beans
4.1.6.RELEASE
org.springframework
spring-context
4.1.6.RELEASE
org.springframework
spring-core
4.1.6.RELEASE
commons-logging
commons-logging
org.springframework
spring-test
4.1.6.RELEASE
test
ch.qos.logback
logback-classic
1.1.3
org.mockito
mockito-core
1.10.19
com.h2database
h2
1.4.186
junit
junit
4.12
test
info.cukes
cucumber-java8
1.2.2
test
info.cukes
cucumber-spring
1.2.2
test
info.cukes
cucumber-junit
1.2.2
test
org.slf4j
jcl-over-slf4j
1.7.13
org.slf4j
slf4j-api
1.7.13
Контекст Cucumber Spring (Cucumber.xml)
Контекст Spring, используемый в тестах (matching-engine-spring-context-TEST.xml)
Это не работает на сервере сборки (хорошо локально):
import org.junit.runner.RunWith;
import cucumber.api.CucumberOptions;
import cucumber.api.junit.Cucumber;
@RunWith(Cucumber.class)
@CucumberOptions(plugin = {"pretty", "html:target/cucumber"})
public class MarketOrderTest {
}
public class MarketOrderSteps {
@Autowired
private TestHelper testHelper;
@Given("^The order book looks like this before the trade is placed:$")
public void setupOrderBook(List orders) {
System.out.println("TestHelper: " + testHelper);
testHelper.setupOrderBook(orders);
}
Это отлично работает на сервере сборки и локально, что наводит меня на мысль, что проблема связана где-то с Cucumber / тем, как я его настроил.
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:*Cucumber.xml")
public class SpringTest{
@Autowired
private TestHelper testHelper;
@Test
public void test() {
assertNotNull(testHelper);
}
Подробнее здесь: https://stackoverflow.com/questions/339 ... h-cucumber