gpt4 book ai didi

java - BundleContext 在使用 pax-exam 的单元测试中为 null

转载 作者:塔克拉玛干 更新时间:2023-11-01 22:14:48 24 4
gpt4 key购买 nike

我正在使用 pax-exam 加载、激活和访问 osgi 包。

以下源代码是我的 pax-exam 测试,它使用 native 容器使用 pax-exam 2.3 运行。

package fr.xlim.ssd.vtg.osgi;

import java.net.URISyntaxException;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.ops4j.pax.exam.Inject;
import org.ops4j.pax.exam.Option;
import org.ops4j.pax.exam.junit.Configuration;
import org.ops4j.pax.exam.junit.ExamReactorStrategy;
import org.ops4j.pax.exam.junit.JUnit4TestRunner;
import org.ops4j.pax.exam.spi.reactors.AllConfinedStagedReactorFactory;
import org.osgi.framework.BundleContext;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import static org.junit.Assert.assertNotNull;
import static org.ops4j.pax.exam.CoreOptions.bundle;
import static org.ops4j.pax.exam.CoreOptions.junitBundles;
import static org.ops4j.pax.exam.CoreOptions.options;

@RunWith(JUnit4TestRunner.class)
@ExamReactorStrategy(AllConfinedStagedReactorFactory.class)
public class BasicOSGILoaderTest {

private Logger logger = LoggerFactory.getLogger(BasicOSGILoaderTest.class);

@Inject
private BundleContext bundleContext;

@Configuration
public Option[] config() {

String projectRoot = null;

try {
projectRoot = ClassLoader.getSystemResource(".").toURI().toURL().toString();
projectRoot = projectRoot.toString().substring(0,projectRoot.toString().length() - 27);
logger.debug("project root: {}", projectRoot);
} catch (MalformedURLException e) {
logger.error("malformed URL to project root: {}", projectRoot, e);
throw new IllegalStateException(e);
} catch (URISyntaxException e) {
logger.error("URI Syntax Error to project root: {}", projectRoot, e);
throw new IllegalStateException(e);
}

return options(
junitBundles(),
logProfile(),
bundle(projectRoot + "libs/org.eclipse.ant.core_3.2.300.v20110511.jar"),
bundle(projectRoot + "libs/org.eclipse.core.contenttype_3.4.100.v20110423-0524.jar"),
bundle(projectRoot + "libs/org.eclipse.core.expressions_3.4.300.v20110228.jar"),
bundle(projectRoot + "libs/org.eclipse.core.jobs_3.5.100.v20110404.jar"),
bundle(projectRoot + "libs/org.eclipse.core.resources_3.7.100.v20110510-0712.jar"),
bundle(projectRoot + "libs/org.eclipse.core.runtime_3.7.0.v20110110.jar"),
bundle(projectRoot + "libs/org.eclipse.equinox.app_1.3.100.v20110321.jar"),
bundle(projectRoot + "libs/org.eclipse.equinox.common_3.6.0.v20110523.jar"),
bundle(projectRoot + "libs/org.eclipse.equinox.preferences_3.4.1.R37x_v20110725.jar"),
bundle(projectRoot + "libs/org.eclipse.equinox.registry_3.5.101.R37x_v20110810-1611.jar"),
bundle(projectRoot + "libs/org.eventb.core_2.4.0.r14093.jar"),
bundle(projectRoot + "libs/org.eventb.core.ast_2.4.0.r14093.jar"),
bundle(projectRoot + "libs/org.eventb.core.seqprover_2.4.0.r14093.jar"),
bundle(projectRoot + "libs/org.rodinp.core_1.5.0.r14093.jar"),
equinox().version("3.7.1")
);
}

@Test
public void checkBundleContext1() {
assertNotNull(bundleContext);
}

@Test
public void checkBundleContext2(BundleContext bc) {
assertNotNull(bc);
}

@Test
public void checkAccessToRodinDB() {
RodinCore.getRodinDB();
}
}

但是我有以下问题:

  • 两个 checkBundleContext 方法都失败,注入(inject)的包上下文(使用 @Inject)或作为测试方法的参数传递始终为 null

  • org.rodinp.core_1.5.0.r14093.jarRodinCore 中访问静态方法 getRodinDb() > 抛出一个关于 org.rodinp.core.RodinCoreClassNotFoundException,即使包 org.rodinp.core 在 Export-package 中捆绑。

最佳答案

检查您的导入。使用

import javax.inject.Inject;

来自 Service Injection page :

Injection is indicated by a javax.inject.Inject annotation. Pax Exam's own Inject annotation of the 1.x release line is now deprecated.

关于java - BundleContext 在使用 pax-exam 的单元测试中为 null,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9837474/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com