Идеи о том, как TDD приложение, которое должно получить имя пользователя из системной среды - PullRequest
2 голосов
/ 04 августа 2010

Как вы обычно относитесь к аспектам TDD вашего приложения, которым требуется доступ к системным переменным операционной системы?

Например, мое приложение должно быть в состоянии правильно получить имя пользователя операционной системы, вошедшего в систему в данный момент.

Так что я TDD функция, которая делает это, и она называется:

string getUserNameFromSystemEnvironment();

У меня проблема:

Я запускаю тест на своем компьютере, поэтому я знаю, какое имя пользователя (например, FooBar). Я TDD getUserNameFromSystemEnvironment() путем жесткого кодирования FooBar в моем тесте, как.

EXPECT_EQ(getUserNameFromSystemEnvironment(), "FooBar");

Очевидно, этот тест работает нормально на моей машине, но не на других. Чтобы он нормально работал на
другие, однако, мне нужно будет использовать getUserNameFromSystemEnvironment(). Но тогда, этот вид поражает цель теста, потому что у нас будет:

EXPECT_EQ(getUserNameFromSystemEnvironment(), 
          getUserNameFromSystemEnvironment());

Есть идеи?

Ответы [ 2 ]

5 голосов
/ 06 августа 2010

Если вы хотите проверить это, вам нужно настроить макет. Создайте интерфейс, который возвращает идентификатор пользователя, реализацию, которая вызывает getUserNameFromSystemEnvironment(), и макет, который возвращает любую строку, которую вы указали для возврата.

Но это не совсем то, что вы хотите сделать. Если вы попытаетесь проверить getUserNameFromSystemEnvironment(), то вы эффективно тестируете функцию операционной системы. Вам не нужно тестировать чужой код. Вместо этого поместите getUserNameFromSystemEnvironment() в интерфейс и смоделируйте это для других частей вашей системы. Затем, например, чтобы проверить LoginValidator, передайте макет, который возвращает usename как «Foobar», и убедитесь, что он проверяет логин. Затем добавьте тест, который возвращает имя пользователя, который не должен проверяться, и убедитесь, что он не пропускает его.

2 голосов
/ 04 августа 2010

Просто убедитесь, что значение возвращается, вам не всегда нужно знать точное значение.

  • Проверьте, является ли тип строкой.
  • Убедитесь, что он не нулевой или не пустой.

Тесты не должны быть совершенными на 100%, они просто должны повысить вашу уверенность в коде.

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