Gui*_*eau 5 osgi sling sling-models
我有一个 Sling 模型类,其中包含对我的服务的引用:
\n\n@OSGiService\nPlanService planService;\nRun Code Online (Sandbox Code Playgroud)\n\n该服务引用 ResourceResolverFactory,以获取具有“管理员用户”的 ResourceResolver:
\n\n@Reference\nprivate ResourceResolverFactory resolverFactory;\nRun Code Online (Sandbox Code Playgroud)\n\n我正在编写一个单元测试来测试我的模型类上的 adjustment。我试图像这样注入对 PlanService 的引用:
\n\n@Rule\npublic final OsgiContext osgiContext = new OsgiContext();\n\nosgiContext.registerInjectActivateService(new PlanServiceImpl());\nRun Code Online (Sandbox Code Playgroud)\n\n但我不知道如何注入对 ResourceResolverFactory 的引用。
\n\n我已经尝试过这样的:
\n\nosgiContext.registerInjectActivateService(new MockResourceResolverFactory());\nRun Code Online (Sandbox Code Playgroud)\n\n但我收到这个错误:
\n\norg.apache.sling.testing.mock.osgi.NoScrMetadataException: No OSGi SCR metadata found in classpath at OSGI-INF/org.apache.sling.testing.resourceresolver.MockResourceResolverFactory.xml\nRun Code Online (Sandbox Code Playgroud)\n\n我在文档和所有可用的模拟选项中找不到如何注入此服务并自动获取引用。任何帮助都会非常有帮助,谢谢!
\n\n编辑:\n感谢 J\xc3\xa9r\xc3\xa9mie\ 的回答,ResourceResolverFactory 被注入到 PlanService 中。然而,我现在面临这个问题:
\n\n[main] WARN org.apache.sling.models.impl.ModelAdapterFactory - Required properties [c.r.o.c.s.j.PlanService c.r.o.c.m.Plan.planService] on model class class c.r.o.c.m.Plan were not able to be injected.\nRun Code Online (Sandbox Code Playgroud)\n\n我尝试使用与 ResourceResolverFactory 相同的行:
\n\nosgiContext.registerService(PlanService.class, new PlanServiceImpl());\nRun Code Online (Sandbox Code Playgroud)\n\n并且还要添加
\n\nMockModelAdapterFactory mockModelAdapterFactory = new MockModelAdapterFactory();\n mockModelAdapterFactory.addModelsForPackage("c.r.o.c.m");\n\nosgiContext.registerService(ModelAdapterFactory.class, mockModelAdapterFactory);\nRun Code Online (Sandbox Code Playgroud)\n\n但这仍然是同样的问题......
\n\n编辑2:使用 SlingContext 而不是 OsgiContext 注册它解决了问题:
\n\n@Rule\npublic final SlingContext slingContext = new SlingContext(ResourceResolverType.RESOURCERESOLVER_MOCK);\n\n@Mock\nPlanService planServiceMock;\n\nslingContext.registerService(PlanService.class, planServiceMock);\nRun Code Online (Sandbox Code Playgroud)\n
尝试这个:
osgiContext.registerService(ResourceResolverFactory.class, new MockResourceResolverFactory());
Run Code Online (Sandbox Code Playgroud)
JavadocOsgiContext在这里
| 归档时间: |
|
| 查看次数: |
4402 次 |
| 最近记录: |