首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提供程序org.togglz.slf4j.Slf4jLogProvider不是子类型

提供程序org.togglz.slf4j.Slf4jLogProvider不是子类型
EN

Stack Overflow用户
提问于 2016-06-27 19:51:22
回答 1查看 2K关注 0票数 2

我有一个用Maven构建的库,它使用Spring4.0.3.RELEASE和Togglz2.2.0.Final。我试图为我的Spring类编写一个JUnit 4.11测试,并在执行的第一个测试中遇到以下错误:

代码语言:javascript
复制
testCreateItem_throwsItemServiceBusinessException(impl.ItemServiceImplTest)  Time elapsed: 1.771 sec  <<< ERROR!
java.util.ServiceConfigurationError: org.togglz.core.spi.LogProvider: 
Provider org.togglz.slf4j.Slf4jLogProvider not a subtype

下面是相关的java测试片段:

代码语言:javascript
复制
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(classes = AppConfig.class, loader = AnnotationConfigContextLoader.class)
@PrepareForTest({ ItemServiceImpl.class })
public class ItemServiceImplTest {
   @Rule
   public TogglzRule togglzRule = TogglzRule.allDisabled(Features.class);

   @Rule
   public PowerMockRule powerMockRule = new PowerMockRule();

   @Test(expected = ItemServiceBusinessException.class)
   public void testCreateItem_throwsItemServiceBusinessException() throws Exception {
      PowerMockito.doReturn(mockMetricsData).when(serviceUnderTest, START_METRICS_METHOD_NAME, any(MetricsOperationName.class), any(RequestContext.class));

      when(mockDao.createItem(any(Item.class), any(RequestContext.class))).thenThrow(dataBusinessException);

      serviceUnderTest.createItem(item, context);

      verify(mockItemServiceValidator).validate(any(Item.class), any(RequestContext.class));

      PowerMockito.verifyPrivate(serviceUnderTest).invoke(START_METRICS_METHOD_NAME, any(MetricsOperationName.class), any(RequestContext.class));

      verify(mockDao).createItem(any(Item.class), any(RequestContext.class));
   }
}

随后的测试调用得到以下错误:

代码语言:javascript
复制
java.lang.NoClassDefFoundError: Could not initialize class org.togglz.junit.TogglzRule

下面是一些相关的依赖项:

代码语言:javascript
复制
 org.mockito:mockito-all=org.mockito:mockito-all:jar:1.9.5:compile,
 org.powermock:powermock-module-junit4=org.powermock:powermock-module-junit4:jar:1.5.6:test,org.powermock:powermock-module-junit4-common=org.powermock:powermock-module-junit4-common:jar:1.5.6:test,
 org.powermock:powermock-reflect=org.powermock:powermock-reflect:jar:1.5.6:test,
 org.powermock:powermock-api-mockito=org.powermock:powermock-api-mockito:jar:1.5.6:test,
 org.powermock:powermock-api-support=org.powermock:powermock-api-support:jar:1.5.6:test,
 org.powermock:powermock-module-junit4-rule=org.powermock:powermock-module-junit4-rule:jar:1.5.6:test,
 org.powermock:powermock-classloading-base=org.powermock:powermock-classloading-base:jar:1.5.6:test,
 org.powermock:powermock-core=org.powermock:powermock-core:jar:1.5.6:test,
 org.powermock:powermock-classloading-xstream=org.powermock:powermock-classloading-xstream:jar:1.5.6:test,
 org.togglz:togglz-core=org.togglz:togglz-core:jar:2.2.0.Final:compile,
 org.togglz:togglz-slf4j=org.togglz:togglz-slf4j:jar:2.2.0.Final:compile,
 org.togglz:togglz-spring-core=org.togglz:togglz-spring-core:jar:2.2.0.Final:compile,
 org.togglz:togglz-testing=org.togglz:togglz-testing:jar:2.2.0.Final:test,
 org.togglz:togglz-junit=org.togglz:togglz-junit:jar:2.2.0.Final:test

我提供了一个LogProvider (org.togglz.slf4j.Slf4jLogProvider)通过位于META-INF/serivces/org.togglz.core.spi.LogProvider的SPI。

这个错误令人费解,因为Slf4jLogProvider应该可以从LogProvider中分配。对不起,我想给大家看一张完整的照片。“测试中”类中的代码正在进行调用,以查看是否在create方法中启用了单个特性。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-06-28 05:38:08

首先:您不需要在应用程序中配置日志提供程序。在应用程序路径中包含togglz-slf4j就足够了,因为这个jar包含相应的SPI文件。

请检查您的类路径中是否存在多个冲突版本的Togglz文件?例如,将togglz-core-2.2.0.Final.jartogglz-slf4j-2.1.0.Final.jar结合使用可能会导致这样的错误。

如果您更新了Togglz,而IDE没有删除旧的档案,就会发生这种情况。在Eclipse上运行干净的构建和/或选择"Update配置“将解决此问题。

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/38062146

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档