java - 单元测试 OSGi 服务,该服务引用了另一个服务

标签 java junit osgi mockito

我有以下服务方法,我正在进行 Junit 测试。 SUT 类具有对 ResourceResolverFactory 服务的 @Reference。当我启动 SUT 类时,resourceResolverFactory 始终为 null,这会导致在执行 try block 中的第一行时抛出 NullPointerException: ResourceResolver = resourceResolverFactory.getAdministrativeResourceResolver(null);

@Reference
ResourceResolverFactory resourceResolverFactory;    

@Override
public PropertyStatusInfo getPropertyStatusInfo(String hotelCode,
        String brandCode) {
    LOGGER.info( "Class : " + this.getClass().getName() 
               + " : Method : getPropertyStatusInfo() : [ENTER]");
    LOGGER.debug( "Input Parameters : Hotel Code - "
                + hotelCode + " BrandCode - " + brandCode);
    ResourceResolver resourceResolver;
    Session session = null;    
    try {
        resourceResolver = resourceResolverFactory.
                           getAdministrativeResourceResolver(null);
        ...
    }
}

有什么建议吗?谢谢!

最佳答案

听起来工厂的实例没有被注入(inject)到您的测试代码中。 您可以使用反射将 resourceResolverFactory 字段设置为某个值,value:

Field field = SUT.class.getDeclaredField("resourceResolverFactory");
field.setAccessible(true);
field.set(instanceOfSutClass, value);

来源:https://stackoverflow.com/a/19976626/3895897

关于java - 单元测试 OSGi 服务,该服务引用了另一个服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37106229/

相关文章:

java - 如何使用 OSGi 托管服务和配置管理来存储配置对象?

java - Byte Buddy 和 ClassLoadingStrategy.UsingLookup

osgi - osgi 中的bundle activate 和 deactivate 方法是否需要同步

java.lang.NoClassDefFoundError : com/googlecode/concurrentlinkedhashmap/ConcurrentLinkedHashMap$Builder 错误

java - 澄清对 "Dependency Inversion"的理解

java - 信号量场景代码

java - Spring Boot 访问 application.properties 以进行 JUnit 测试

java - 使用 JUnit @Test(expected=Exception.Class) 捕获异常

java - 如何在 Java 中初始化字节数组?

unit-testing - 如果我@Ignore JUnit4 中的测试类,@BeforeClass 是否仍然运行?