2014-07-17 10 views
7

Je veux exécuter cette ligne de code:comment mettre en œuvre un hamcrest matcher

assertThat(contextPin.get(), equalTo(pinPage.getPinObjFromUi()));

mais je veux imprimer le journal informatif

ce qui signifie que je pourrais savoir quels champs ne sont pas égal.

J'ai donc pensé à implémenter un matcher.

Je l'ai googlé, mais n'a pas pu l'écrire correctement

que ma méthode ne pouvait pas obtenir les objets actual et expected ensemble.

voici mon code:

comment puis-je écrire propre?

public class PinMatcher extends TypeSafeMatcher<Pin> { 

    private Pin actual; 
    private Object item; 

    public PinMatcher(Pin actual) { 
     this.actual = actual; 
    } 

    @Override 
    protected boolean matchesSafely(Pin item) { 
     return false; 
    } 

    @Override 
    public void describeTo(Description description) { 

    } 

//cannot override this way 
    @Override 
    public boolean matches(Object item){ 
     assertThat(actual.title, equalTo(expected.title)); 
return true; 
    } 

//cannot access actual when called like this: 
// assertThat(contextPin.get(), new PinMatcher.pinMatches(pinPage.getPinObjFromUi())); 
    @Override 
    public boolean pinMatches(Object item){ 
     assertThat(actual.title, equalTo(expected.title)); 
return true; 
    } 
} 
+1

S'il vous plaît consulter le code source de certains intégré Hamcrest matcher. Ils vous montrent comment remplacer les matchsSafely et describeTo. –

Répondre

1

Vos résultats devraient recevoir expected dans le constructeur et le comparer à la « valeur réelle » des paramètres item passé à matchesSafely. Vous ne devez pas remplacer matches.

Cela ligne avec ce que assertThat attend:

assertThat(actual, matcher-using-expected); 

Je pense que les matchers basés sur des chaînes sont de sécurité type et fournira un bon exemple.

4

Essayez quelque chose comme ceci:

package com.mycompany.core; 

import org.hamcrest.Description; 
import org.hamcrest.TypeSafeMatcher; 


public class PinMatcher extends TypeSafeMatcher<Pin> { 

    private Pin actual; 

    public PinMatcher(Pin actual) { 
     this.actual = actual; 
    } 

    @Override 
    protected boolean matchesSafely(Pin item) { 
     return actual.title.equals(item.title); 
    } 

    @Override 
    public void describeTo(Description description) { 
     description.appendText("should match title ").appendText(actual.title); 

    } 
} 
Questions connexes