0

我一直在为一个项目使用吊索模型做一些工作,并在此过程中创建了几个自定义注入器。实施时(在 AEM 中使用),一切似乎都运行良好。但是,当我测试自定义注入器时没有运行。

这是我当前设置的示例

//在我的模型中

@Inheritable
@CustomAnnotation("foo")
private String _foo

//在测试中(使用 wcm.io 模拟库进行测试)

@Rule
AemContext context = new AemContext(ResourceResolverType.RESOURCERESOLVER_MOCK);

//required by the injector
@Mock
InheritanceService _inheritanceService;

@Mock
InheritableInjector _inheritanceInjector;

@Before
public void setup() {
  context.registerService(InheritanceService.class, _inheritanceService);
  context.registerService(InheritableInjector.class, _inheritanceInjector);

  context.addModelsForPackage("com.package.example.models");

  //use this resource in tests to adaptTo(MyModel.class)
  _resource = context.load().json("myJson.json", "/myPath");
}

... tests

测试编译并运行,但注入器没有被执行。我知道它已注册,因为当我没有在上下文中注册 Injector 的依赖服务时,我会收到错误消息。当我通过它进行调试时,没有一个断点被命中。我想知道我是否还需要在某处注册“Inheritable”注释,或者是否有人只有关于如何让自定义注入器执行的一般信息。

谢谢你

4

1 回答 1

1

我能够找出我的错误。所以关于 Sling 模型注入器要记住的重要一点是它们只是 OSGI 服务(我完全让自己远离)。

因此,只需将它们视为普通服务,然后记住为 Injector 注释@InjectMocks是我需要做的以修复错误。

以下现在效果很好。

@Mock
InheritanceService _inheritanceService; //injector dependency

@InjectMocks
InheritanceInjector _inheritanceInjector;

@Before
public void setup() {
    context.registerService(InheritanceService.class, _inheritanceService);
    context.registerService(InheritableInjector.class, _inheritanceInjector);
}

希望这可以帮助任何可能遇到问题的人。如果有人可以使这个答案更好,请随时回复/编辑。

于 2016-09-22T18:41:19.207 回答