Модульное тестирование простого кеша в памяти - PullRequest
0 голосов
/ 14 февраля 2019

У меня есть простой кэш в памяти, который выглядит (упрощенно) ниже:

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"));
}

Но проблема в том, что он тестирует методы Set и Get.Поэтому, если тест прервется, я не буду знать, есть ли ошибка в Set или Get.

Каков рекомендуемый способ индивидуального тестирования методов Get и Set?

Один из способов, по которому я думал, это модифицировать класс Cache для принятия экземпляра Map<String, Integer>, например:

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

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

    ...
    ...
}

Затем из теста я могу создать экземпляр Map и передать егоКонструктор кэша.Тогда все операции Set произойдут в экземпляре карты, который я передал, и я могу проверить, сработал ли Set как ожидалось.

Но я не совсем уверен, правильный ли это подход.

Точно так же я хочу, чтобы была возможность тестировать Get, не завися от Set.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...