junit Guice集成测试方法

bvpmtnay  于 2022-11-11  发布在  其他
关注(0)|答案(1)|浏览(145)

对于基于Guice的应用程序的集成测试,我很难找到有效的解决方案。
它比Guice doc上的HelloWorld示例稍微复杂一些。
这个想法是为了提供junit扩展来注入所有依赖项(就像一个真实的的应用程序),但是我需要在beforeEach中重新注入一些模块,同时我还需要在beforeAll中支持注入器创建逻辑,我需要绑定一些严重的类似于数据库的模块、队列。
最大的问题是如何正确处理beforeAllafter中示例化的模块的未关闭连接

class Extension implements BeforeAllCallback, BeforeEachCallback,
        AfterAllCallback, AfterEachCallback {
    private Injector injector;

    @Override
    public void beforeAll(ExtensionContext extensionContext) {
      // modules = some havyweight modules (db, etc)
      injector = Guice.createInjector(modules);
      dbMigrate(injector);
    }

    @Override
    public void beforeEach(ExtensionContext context) {
      // modules like mocks, time-mocks
      List<AbstractModule> newModules = Stream.concat(oldModules, tempModules).collect(Collectors.toList());
      injector = Create.createInjector(newModules); 
    }
}

这意味着我创建了两次recreate硬资源,其中一些资源无法正确释放。
我尝试在beforeEach中创建子注入器,但它对我不起作用,因为我需要在每次测试后重新绑定这些模块。
有人能建议如何科普吗?

avkwfej4

avkwfej41#

你最好的选择是根本不使用Guice进行单元测试。如果你已经做好了准备,你可以在测试中手动使用Guice通常会做的构造函数注入。这样做的好处是只加载和启动你需要的依赖项,而不是整个应用程序。这应该会让事情快得多。
如果您不能做到这一点,那么也许您可以更改JUnit规则,在每个测试上创建注入器(在beforeEach中,而不是beforeAll中)。

相关问题