测试 - 如何检查是否有东西被添加到HashMap

时间:2015-09-29 11:30:33

标签: java unit-testing mockito

我有一个方法,只需添加一些东西到hashmap。我的测试看起来像这样:

    Collection<SomeCollection> colelction = setUpConfluenceUsers();
    String group = "a";
    String group2 = "s";
    Parser collection = new ParserImpl();

    //when
    parser.map(group,users);

hashmap在类的顶部初始化。我想测试一下是否有效。我只是不知道如何检查该列表是否包含预期的元素。检查该方法是否会返回一些内容会很简单。

现在我的解析器看起来像这样:

public static final String SEARCH_REGEX = "([\\s>])@(\\w+(?:[-\\.]\\w+)*)";

public static final int GROUP = 2;
private List<String> list = Lists.newArrayList();

Map hashMap = new HashMap<String, Collection<SomeCollection>>();


@Nonnull
@Override
public List<String> find(String body) {

    Pattern r = Pattern.compile(SEARCH_REGEX);
    Matcher matcher = r.matcher(body);

    MatchResultsIterable resultIterable = new MatchResultsIterable(matcher);

    for (MatchResult matchResult : resultIterable) {
        list.add(matchResult.group(GROUP));
    }

    return list;
}

@Nonnull
@Override
public String parse(String body) {

    return body;
}

@Override
public void map(@Nonnull String group, @Nonnull Collection<SomeCollection> users) {
    hashMap.put(group, users);
}

我想做一些断言来检查map cworks是否正确。任何想法,代码片段都会很好。

1 个答案:

答案 0 :(得分:1)

您没有显示您的解析器类是什么,但一种解决方案是为此类创建一个仅测试构造函数,并将地图的间谍或模拟传递给它;例如:

@Test
public void mapIsFilled()
{
    final Map<Foo, Bar> map = mock(Map.class);
    final Parser parser = new Parser(map);

    parser.whatever();

    very(map).put(...);
}

更精确的答案要求您发布解析器类的代码。