Comment affirmer Carte contient la Carte avec entrée

J'ai une unité de test que doit vérier un imbriquée valeur de la carte. Je peux obtenir mon affirmation de travail en tirant à l'entrée et à la correspondance de la sous-jacentes Map, mais je cherchais un moyen de montrer que l'assertion est en train de faire. Voici un très simplifié test:

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.hasEntry;

import java.util.HashMap;
import java.util.Map;

import org.junit.Test;

public class MapContainsMapTest {
    @Test
    public void testMapHasMap() {
        Map<String, Object> outerMap = new HashMap<String, Object>();
        Map<String, Object> nestedMap = new HashMap<String, Object>();
        nestedMap.put("foo", "bar");
        outerMap.put("nested", nestedMap);

        //works but murky
        assertThat((Map<String, Object>) outerMap.get("nested"), hasEntry("foo", "bar"));
        //fails but clear
        assertThat(outerMap, hasEntry("nested", hasEntry("foo", "bar")));
    }
}

Il semble que le problème est que l'extérieur de la carte est en cours par rapport à l'aide de hasEntry(K key, V value) tout ce que je veux utiliser est hasEntry(Matcher<? super K> keyMatcher, Matcher<? super V> valueMatcher). Je ne suis pas sûr de la façon de contraindre l'affirmation d'utiliser la seconde forme.

Merci d'avance.

"Il semble que le problème est que l'extérieur de la carte est en cours par rapport à l'aide ..." hasEntry(is("key"), is("value")) par exemple serait la cause de la deuxième formulaire à utiliser. Peut-être que vous pourriez utiliser equalTo matcher en place de is, mais de toute façon, la lisibilité est en dehors de la fenêtre.
Le problème est à l'extérieur de test, donc j'ai besoin de quelque chose comme equalTo("nested")... mais qui ne fonctionne pas sauf si je change l'extérieur type de carte à Map<String, Map<String,Object>>

OriginalL'auteur Jeff E | 2015-07-20