@BeforeSuite和@Guice计时问题

时间:2015-03-27 05:03:31

标签: maven dependency-injection testng guice

我正在测试一个内部使用@Inject的ftp客户端库。我有一个与时间问题有关的问题。

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 个答案:

答案 0 :(得分: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;
}