2015-03-27 2 views
0

Я тестирую клиентскую библиотеку ftp, которая внутренне использует @Inject. И у меня проблема, связанная с вопросом времени.@BeforeSuite и @Guice timing issue

public class FakeFtpServerTest { 

    @BeforeSuite 
    public void startFtpServer() {} // not invoked before injection 

    @AfterSuite 
    public void stopFtpServer() {} 
} 

public class MyFtpClientModule { 

    @Override 
    protected void configure() { 
    } 
} 

@Guice(modules={MyFtpClientModule.class}) 
public class MyFtpClientTest { 

    @Inject 
    @InjectMe 
    private MyFtpClient client; 
} 

Проблема заключается в том, что инъекция вызывается, когда TestNG создания экземпляра MyFtpClientTest, что означает время до @BeforeSuite вызывается. И модуль, который связывает и предоставляет некоторый ftp-клиент, который должен быть уже подключен к фальшивому ftp-серверу, терпит неудачу.

Как я могу решить эту проблему? Есть ли какой-либо метод для решения этой проблемы?

+1

Вы можете попробовать аннотировать startFtpServer как '@ PostConstruct' –

ответ

0

Я решил свою проблему следующим образом. Вместо использования @Guice я программно вставляю поле на @BeforeMethod.

public class MyFtpClientTest { 

    @BeforeSuite 
    public void startFtpServer() {} // not invoked before injection 

    @AfterSuite 
    public void stopFtpServer() {} 

    @BeforeMethod 
    public void injectFtpClient() { 
     client = Guice.createInjector(this).getInstance(FileBack.class); 
    } 

    @AfterMethod 
    public void ejectFtpClient() { 
     client = null; 
    } 

    @Override 
    protected void configure() { 
    } 

    @Inject 
    private MyFtpClient client; 
}