Прагматичное юнит-тестирование - PullRequest
0 голосов
/ 05 февраля 2010

Я пишу приложение с использованием инфраструктуры MVC, которая заботится о многих типовых схемах нашей системы. Конкретно - приложение написано на Flex с использованием инфраструктуры Parsley MVC. Однако вопрос не зависит от языка.

В моей модели представления / Code-Behind / View-Controller (как бы вы это ни называли) у меня может быть что-то вроде этого:

[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")]
[ManagedEvents["attemptLogin"]
public class LoginViewPM {
   public function attemptLogin(username:String,password:String):void
   {
       dispatchEvent(new AttemptLoginEvent(username,password));
   }
 }

Тогда в другом месте моей системы код, который отвечает на это, будет выглядеть так

public class LoginCommand {
   [MessageHandler]
   public function execute(attemptLoginEvent:AttemptLoginEvent):void {
      // Do login related stuff
   }
}

Важно отметить, что в Flex / Actionscript метатеги не проверяются компилятором. Например:

[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")]
[ManagedEvent["attemptLogin"] // Spelling mistake - metatag is ManagedEvents
public class LoginViewPM {

и

[Event(name="attemptLogin",type="com.foo.AttemptLoginEvent")]
[ManagedEvent["attemtLogin"] // Spelling mistake - event name is wrong
public class LoginViewPM {

В двух приведенных выше примерах фреймворк потерпит неудачу. В первом примере он молча терпит неудачу (потому что метатег неверен - следовательно, фреймворк никогда не включается). Во втором примере мы получаем некоторую регистрацию времени выполнения, которая частично предупреждает нас, что что-то не так.

Учитывая это, каков прагматический уровень модульного тестирования для метода tryLogin () в PM с учетом обязанностей инфраструктуры MVC? То есть:

Должен ли я:

  • Проверка того, что AttemptLoginEvent управляется инфраструктурой MVC
  • Проверьте, что LoginCommand вызывается платформой при отправке события.

В других средах контейнеров / фреймворков я не пишу тесты, которые выполняют обязанности фреймворков, так как (ИМХО) это приводит к хрупким тестам. Однако, учитывая отсутствие проверки компилятором, в этом случае это может показаться оправданным.

Мысли

Ответы [ 2 ]

0 голосов
/ 05 февраля 2010

То, что вы хотите проверить, звучит как интеграционное тестирование. Если вам нужен юнит-тест, вы должны определить, какой у вас юнит.

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

public class MockLoginCommand : ICommandReceiver {

   public bool BeenCalled { get; set; }

   [MessageHandler]
   public function execute(attemptLoginEvent:AttemptLoginEvent):void {
      BeenCalled=true;
   }
}

и т.д.

0 голосов
/ 05 февраля 2010

Если вы думаете об этом, вы на самом деле не столько проверяете обязанности фреймворка, сколько проверяете, насколько хорошо ваши кодеры могут печатать.

Однако, если тот же кодер, который написал событие, также пишет тест, и если имя события является чем-то, что не будет часто обновляться, то вы, вероятно, можете пропустить его, поскольку любые опечатки, скорее всего, будут обнаружены во время теста пишется.

...