我已经为项目的吊索模型做了一些工作,并在此过程中创建了几个自定义注射器。实施后(在AEM中使用)似乎一切都很好。但是,当我测试自定义注射器时没有运行。
这是我目前设置的一个例子
//在MyModel中
@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未被执行。我知道它已注册,因为当我没有在上下文中注册Injector的依赖服务时,我收到错误。当我通过它调试时,没有任何断点被击中。我想知道是否还需要注册"可继承"某处注释或者是否有任何关于如何让自定义注入器执行的一般信息。
谢谢
答案 0 :(得分:0)
我能够弄明白我的错误。因此,关于Sling Model Injectors的重要一点是它们只是OSGI服务(我完全让自己远离它)。
因此,只需将它们视为普通服务,然后记住使用@InjectMocks
注释Injector是我需要做的,以便修复错误。
以下现在效果很好。
@Mock
InheritanceService _inheritanceService; //injector dependency
@InjectMocks
InheritanceInjector _inheritanceInjector;
@Before
public void setup() {
context.registerService(InheritanceService.class, _inheritanceService);
context.registerService(InheritableInjector.class, _inheritanceInjector);
}
希望这可以帮助任何可能遇到问题的人。如果有人能够更好地回答这个问题,请随时回复/编辑。