对简单的内存中缓存进行单元测试

时间:2019-02-13 23:15:27

标签: java unit-testing

我有一个简单的内存缓存,如下所示(简化):

class Cache {
    private Map<String, Integer> m = new HashMap<>();

    public String get(String key) {
        if(!m.containsKey(key))
            return null;

        return m.get(key);
    }

    public void set(String key, String value) {
        m.put(key, value);
    }

    public Set<String> getKeys() {
        return m.keySet();
    }
}

现在,我想为此类编写单元测试。我当时想我可以按照以下方式做些事情:

[TestMethod]
public void Get_Success() {
    Cache c = new Cache();
    c.set("Apple", 1);
    c.set("Grape", 2);
    c.set("Banana", 3);

    Assert.Equals(1, c.get("Apple"));
    Assert.Equals(2, c.get("Grape"));
    Assert.Equals(3, c.get("Banana"));
}

但是问题是,它同时测试SetGet方法。因此,如果测试失败,我将不知道该错误是在Set还是Get中。

建议分别测试GetSet方法的方法是什么?

我认为的一种方法是,修改Cache类以接受一个Map<String, Integer>实例,例如:

class Cache {
    private Map<String, Integer> m = new HashMap<>();

    public Cache(Map<String, Integer> m) {
        this.m = m;
    }

    ...
    ...
}

然后从测试中,我可以创建Map的实例并将其传递给Cache构造函数。然后,所有Set操作都将在我传递的地图实例中发生,并且我可以验证Set是否按预期工作。

但是我不太确定这是否是正确的方法。

同样,我也希望能够不依赖Get来测试Set

0 个答案:

没有答案