OSGiR7-如何在测试类中实例化配置



配置类如下所示:

@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类,但不确定如何将config参数传递给activate方法

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

请参阅https://search.maven.org/artifact/org.osgi/org.osgi.util.converter/1.0.8/jarAPI罐。

为此,我创建了一个小型实用程序,允许您根据配置注释(或接口(以类型安全的方式设置配置。它使用了与嘲笑库相同的思想。

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

相关内容

最新更新