Модульное тестирование: использование другого метода для проверки корректно выполняемого метода - PullRequest
3 голосов
/ 03 декабря 2009

Я работаю над написанием юнит-тестов должным образом, и мне интересно, является ли это плохой техникой для проверки результата тестируемого метода путем вызова другого метода для проверки результата?

т. в приведенном ниже примере я могу только проверить, что вызов метода StoreObject был успешным (т. е. объект, хранящийся в кеше), вызвав либо свойство FetchObject, либо свойство HasCachedObjects, оба из которых содержат логику, которая должна тестироваться отдельно. Что бы вы сделали в этом случае, если результат скрыт от публичного API?

У меня есть класс Cache:

public class Cache {

  private Dictionary<string, object> _Cache = null;

  public bool HasCachedObjects {
    get {
      if (_Cache.Count > 0) {
        return true;
      } else {
        return false;
      }
    }
  }

  public Cache() {
    _Cache = new Dictionary<string,object>();
  }

  public void StoreObject(string key, object obj) {
    _Cache[key] = obj;
  }

  public object FetchObject(string key) {
    if (_Cache.ContainsKey(key)) {
      return _Cache[key];
    }

    return null;
  }
}

Ответы [ 3 ]

3 голосов
/ 03 декабря 2009

Не думайте, что тестовый пример - это тестирование метода; думать об этом как о тестировании единицы функциональности (или, возможно, варианта использования).

Таким образом, ваш тест может быть StoreObject_WhenSuccessful_AddsToCache или чем-то подобным.

И да, я бы подтвердил тест через общедоступный API.

2 голосов
/ 03 декабря 2009

Совсем нет. Фактически, это, вероятно, два разных теста: один для проверки того, что HasCachedObjects имеет значение true после кэширования объекта, и один для проверки того, что вы можете получить объект после его сохранения.

(Я не совсем уверен, что делает этот класс, кроме как обернуть словарь в немного другой API, но это другая тема ...)

0 голосов
/ 03 декабря 2009

Вместо тестирования отдельных методов вы можете тестировать различные варианты использования / сценарии, например: добавить в кеш - проверить, есть ли объект и т. Д. *

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