【发布时间】:2015-05-02 15:00:43
【问题描述】:
我正在尝试测试一个类,并且我有自己的参数 Mathcher 来匹配这些参数。代码如下:
@Test
public void testDoBindModelsToForm()
{
OrganizationToRelatedSubregionsConverter organizationToRelatedSubregionsConverter = mock(OrganizationToRelatedSubregionsConverter.class);
List<Organization> subregion1 = new ArrayList<Organization>();
Organization subregionOrg1 = CommonentityFactory.eINSTANCE.createOrganization();
subregionOrg1.setMID(OrganizationMID.create(DOMAIN, 100L));
subregionOrg1.setNameFormatted("Subregion 1"); //$NON-NLS-1$
subregion1.add(subregionOrg1);
when(
organizationToRelatedSubregionsConverter.convert(Matchers
.argThat(new OrganizationMIDMatcher(catchmentArea1.getMID())))).thenReturn(
subregion1);
CatchmentFormController catchmentFormController = new CatchmentFormController(
catchmentForm, DOMAIN, conversationDescriptor, configuration, registrationManager,
catchment, null, LaunchMode.ADD, organizationToRelatedSubregionsConverter);
catchmentFormController.renderDynamicForm();
organizationToRelatedSubregionsConverter.convert(catchmentArea1.getMID());
}
这是我的自定义 Matcher 类:
static class OrganizationMIDMatcher extends ArgumentMatcher<OrganizationMID>
{
private OrganizationMID expectedOrganizationMID;
public OrganizationMIDMatcher(OrganizationMID expectedOrganizationMID)
{
this.expectedOrganizationMID = expectedOrganizationMID;
}
@Override
public boolean matches(Object argument)
{
if (argument != null && argument instanceof OrganizationMID)
{
OrganizationMID actualOrganization = (OrganizationMID) argument;
return actualOrganization.equals(expectedOrganizationMID);
}
return false;
}
}
当我运行测试时,我收到以下错误。我使用的 Mockito 依赖项是 Mockito-all 1.8.5。
> java.lang.LinkageError: loader constraint violation:
when resolving method "org.mockito.Matchers.argThat(Lorg/hamcrest/Matcher;)Ljava/lang/Object;"
the class loader (instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader)
of the current class, com/cerner/registration/ui/internal/converters/OrganizationToRelatedSubregionsConverterTest,
and the class loader
(instance of org/eclipse/osgi/internal/baseadaptor/DefaultClassLoader) for resolved class,
org/mockito/Matchers, have different Class objects for the type org/hamcrest/Matcher used in the signature
您知道这里可能存在什么问题吗?
【问题讨论】:
-
包含 hamcrest 的 jar 在您的运行时环境中是唯一的吗? (旧的junit包含embedded,如果mockito依赖也被解决,这可能会导致问题。)
-
@GáborBakos 我正在使用 junit 4.8.2-v370 和 mockito-all 1.8.5。我看到在我的依赖树中,junit 引入了 hamcrest 1.1.0。我应该为 hamcrest 添加另一个依赖项吗?
标签: java mockito linkageerror