Provider org.togglz.slf4j.Slf4jLogProvider 不是子类型
Provider org.togglz.slf4j.Slf4jLogProvider not a subtype
我有一个用 Maven 构建的库,它使用 Spring 4.0.3.RELEASE 和 Togglz 2.2.0.Final。我正在尝试将 Spring class 和 运行 的 JUnit 4.11 测试写入执行的第一个测试中的以下错误:
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 测试片段:
@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));
}
}
后续测试调用出现以下错误:
java.lang.NoClassDefFoundError: Could not initialize class org.togglz.junit.TogglzRule
以下是我的一些相关依赖项:
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
并且我通过 SPI 提供了一个 LogProvider (org.togglz.slf4j.Slf4jLogProvider
),位于 META-INF/serivces/org.togglz.core.spi.LogProvider
这个错误令人费解,因为 Slf4jLogProvider 应该可以从 LogProvider 分配。抱歉冗长,但我想尝试展示完整的图片。 class "under test" 中的代码正在调用以查看是否在创建方法中启用了单个功能。
首先:您不需要在应用程序中配置日志提供程序。在您的应用程序路径中包含 togglz-slf4j
就足够了,因为此 jar 包含相应的 SPI 文件。
请检查您的类路径中是否存在多个冲突版本的 Togglz JAR 文件?例如,将 togglz-core-2.2.0.Final.jar
与 togglz-slf4j-2.1.0.Final.jar
一起使用可能会导致这样的错误。
如果您更新 Togglz 而您的 IDE 没有删除旧档案,就会发生这种情况。 运行 干净的构建 and/or 在 Eclipse 上选择 "Update Maven Configuration" 将解决此问题。
我有一个用 Maven 构建的库,它使用 Spring 4.0.3.RELEASE 和 Togglz 2.2.0.Final。我正在尝试将 Spring class 和 运行 的 JUnit 4.11 测试写入执行的第一个测试中的以下错误:
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 测试片段:
@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));
}
}
后续测试调用出现以下错误:
java.lang.NoClassDefFoundError: Could not initialize class org.togglz.junit.TogglzRule
以下是我的一些相关依赖项:
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
并且我通过 SPI 提供了一个 LogProvider (org.togglz.slf4j.Slf4jLogProvider
),位于 META-INF/serivces/org.togglz.core.spi.LogProvider
这个错误令人费解,因为 Slf4jLogProvider 应该可以从 LogProvider 分配。抱歉冗长,但我想尝试展示完整的图片。 class "under test" 中的代码正在调用以查看是否在创建方法中启用了单个功能。
首先:您不需要在应用程序中配置日志提供程序。在您的应用程序路径中包含 togglz-slf4j
就足够了,因为此 jar 包含相应的 SPI 文件。
请检查您的类路径中是否存在多个冲突版本的 Togglz JAR 文件?例如,将 togglz-core-2.2.0.Final.jar
与 togglz-slf4j-2.1.0.Final.jar
一起使用可能会导致这样的错误。
如果您更新 Togglz 而您的 IDE 没有删除旧档案,就会发生这种情况。 运行 干净的构建 and/or 在 Eclipse 上选择 "Update Maven Configuration" 将解决此问题。