2017-01-17 9 views
0

структура ..Spring Autowired поле нулевой на тест Helper Класс

src/test/java 
config 
    TestConfiguration.java 
hooks 
    WebDriverHooks.java 
nicebank 
    RunSteps.java 
    OtherSteps.. 
support 
    ATMUserInterface.java 
    KnowsTheDomain.java 

@Autowired правильно инъекционного KnowsTheDomain при размещении шагов в nicebank пакете. Но я не могу @AutowiredKnowsTheDomain, когда в классы Helper, таких как WebDriverHooks и ATMUserInterface

не требует настройки аннотацию, когда для автоматического связывания различных пакетов? Я бегущий по огурцам.

Из WebDriverHook.java и ATMUserInterface.java поле private KnowsTheDomain helper; возвращает null вместо экземпляра singleton. Мне нужно, чтобы они возвращали то, что он возвращает, когда я запускаю Шаги в пакете nicebank.

У кого-нибудь есть идея, почему это helper поле имеет значение null?

TestConfiguration.java

@Configuration 
@ComponentScan(basePackages = { "support"}) 
public class TestConfiguration { 
    @Bean 
    public static KnowsTheDomain knowsTheDomain() { 
     return new KnowsTheDomain(); 
    } 
} 

WebDriverHooks.java

@ContextConfiguration(classes = TestConfiguration.class, loader=AnnotationConfigContextLoader.class) 
@Configurable(autowire = Autowire.BY_TYPE) 
public class WebDriverHooks { 
    @Autowired 
    private KnowsTheDomain helper; 

    @After 
    public void finish(Scenario scenario) { 
     try { 
      byte[] screenshot = 
         helper.getWebDriver().getScreenshotAs(OutputType.BYTES); 
      scenario.embed(screenshot, "image/png"); 
     } catch (WebDriverException somePlatformsDontSupportScreenshots) { 
      System.err.println(somePlatformsDontSupportScreenshots.getMessage()); 
     } 
     finally { 
      helper.getWebDriver().close(); 
     } 
    } 
} 

RunSteps.java - это работает огурца бегун ..

@RunWith(Cucumber.class) 
@CucumberOptions(
     plugin = {"pretty", "html:out"}, 
     snippets = SnippetType.CAMELCASE, 
     features = "classpath:cucumber", 
     dryRun = false) 
@ContextConfiguration(classes = TestConfiguration.class) 
public class RunSteps { 

} 

KnowsTheDomain.java

@Component 
public class KnowsTheDomain { 
    private Account myAccount; 
    private CashSlot cashSlot; 
    private Teller teller; 
    private EventFiringWebDriver webDriver; 

    public Account getMyAccount() { 
     if (myAccount == null) { 
      myAccount = new Account(); 
     } 
     return myAccount; 
    } 
    public CashSlot getCashSlot() { 
     if (cashSlot == null) { 
      cashSlot = new CashSlot(); 
     } 
     return cashSlot; 
    } 
    public Teller getTeller() { 
     if (teller == null) { 
      teller = new ATMUserInterface(); 
     } 
     return teller; 
    } 
    public EventFiringWebDriver getWebDriver() { 
     if (webDriver == null) { 
      System.setProperty("webdriver.chrome.driver", "src/test/resources/chromedriver_win32/chromedriver.exe"); 
      webDriver = new EventFiringWebDriver(new ChromeDriver()); 
     } 
     return webDriver; 
    } 
} 

ATMUserInterface.java

@ContextConfiguration(classes = TestConfiguration.class, loader=AnnotationConfigContextLoader.class) 
@Configurable(autowire = Autowire.BY_TYPE) 
public class ATMUserInterface implements Teller { 
    @Autowired 
    private KnowsTheDomain helper; 

    @Override 
    public void withdrawFrom(Account account, int dollars) { 
     try { 
      helper.getWebDriver().get("http://localhost:" + ServerHooks.PORT); 
      helper.getWebDriver().findElement(By.id("Amount")) 
         .sendKeys(String.valueOf(dollars)); 
      helper.getWebDriver().findElement(By.id("Withdraw")).click(); 
     } catch (Exception e) { 
      System.err.println("err" + e); 
     } 
    } 
} 
+0

'@ Configurable' требует полной АОП, чтобы работать, который требует немного настройки. Лучший вариант - это почти всегда переход на инсталляцию конструктора. – chrylis

ответ

0

@Autowired будет работать только в бобах.

Поэтому убедитесь, что вы используете @Autowired аннотацию.

Добавить крюков пакет @ComponentScan ниже

@ComponentScan (basePackages = { "поддержка", "крючки"})

 Смежные вопросы

  • Нет связанных вопросов^_^