【问题标题】:OSGi R7 - How to instantiate a configuration inside a test class?OSGi R7 - 如何在测试类中实例化配置?
【发布时间】:2021-12-23 08:36:19
【问题描述】:

配置类如下所示:

@ObjectClassDefinition(name="SampleConfig", description="This is a configuration class for Sample")
public @interface SampleConfig {

@AttributeDefinition(name="username", defaultValue = "username", description = "some sample")
String username() default "username";

}

使用配置的主类如下所示:

@Component(name="Sample", configurationPolicy = ConfigurationPolicy.REQUIRE)
@Designate(ocd = SampleConfig.class)
public class Sample {

@Activate
void activate(final SampleConfig config) {
    String username = config.username();
}

我正在编写一个 TestSample JUnit 类,但不确定如何将配置参数传递给 activate 方法

【问题讨论】:

    标签: unit-testing junit osgi


    【解决方案1】:

    我会查看OSGi Converter specification。您可以使用转换器实例将具有所需测试值的 Map 转换为 SampleConfig 实例,然后将其传递给该方法。有关示例,请参阅https://docs.osgi.org/specification/osgi.cmpn/8.0.0/util.converter.html#d0e168444

    有关 API jar,请参阅 https://search.maven.org/artifact/org.osgi/org.osgi.util.converter/1.0.8/jar

    【讨论】:

      【解决方案2】:

      为此,我创建了一个小型实用程序,允许您基于配置注释(或接口)以类型安全的方式设置配置。它使用与模拟库相同的想法。

      https://github.com/aQute-os/biz.aQute.osgi.util/tree/master/biz.aQute.osgi.configuration.util

      @interface FooConfig {
          int port() default 10;
          String host() default "localhost";
      }
      
      @Test
      public void testSimple() throws Exception {
         ConfigHelper<FooConfig> ch = new ConfigHelper<>(FooConfig.class, cm);
         Map<String, Object> read = ch.read("foo.bar");
         assertEquals(0, read.size());
      
         assertEquals( 10, ch.d().port());
         assertEquals( "localhost", ch.d().host());
      
         ch.set( ch.d().port(), 3400);
         ch.set( ch.d().host(), "example.com");
         ch.update();
      
         Configuration c = cm.getConfiguration("foo.bar");
         Dictionary<String,Object> properties = c.getProperties();
         assertEquals( 3400, properties.get("port"));
         assertEquals( "example.com", properties.get("host"));
      }
      

      Maven坐标:biz.aQute:biz.aQute.osgi.configuration.util:1.7.0

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2019-08-04
        • 2019-05-21
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2019-07-27
        相关资源
        最近更新 更多