1

クラスをテストしようとしていますが、引数と一致する独自の引数 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

ここで何が問題になる可能性がありますか?

4

1 に答える 1

2

と一緒に使用mockito-allしないでくださいjunit 4.8.2-v370。どちらにもhamcrest依存関係があり、OSGi 環境で異なるクラスローダーを使用するため、これらのクラスは互換性がありません。mockito-core回避策として、 (同じバージョン1.8.5を使用する場合) と少なくとも(適切にバンドルを開始した場所: 依存関係として) のバージョンを使用することを検討する必要があります。4.9junithamcrest

または、従わないでください-の4.8.2バージョンを「フォーク」して、クラスjunitなしで再パッケージ化できます。hamcrest

于 2015-05-04T14:59:25.610 に答える