Тестирование взаимодействия с внешними службами

Предварительные условия: Я использую последнюю версию Play! framework и версия Java (не Scala).

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

Подход контроллера

В других рамках то, что я бы сделал, было бы использовать инъекцию конструктора в контроллер и пройти в издевательской очереди в моих тестах; однако, с Play! диспетчеры статичны, который означает, что я не могу сделать новый MyController (mockedQueue) в моих тестах.

Я мог бы использовать Google Guice и поместить заметку @ Inject на статическое поле в моем контроллере, но это не очень приятно для меня, так как это либо означает, что я должен сделать поле общедоступным для замены в тесте, либо я должен использовать контейнер в своих тестах. Я бы предпочел использовать инъекцию конструктора, но играй! кажется, не способствует этому.

Подход модели

Часто говорят, что ваша логика должна быть в вашей модели, а не в геймпаде. Это имеет смысл; тем не менее, мы не в Ruby здесь, и взаимодействие ваших сущностей с внешними службами (электронная почта, очереди сообщений и т.д.) значительно менее проверяемо, чем в динамической среде, где вы можете просто заменить статические вызовы StartQueue издевательским экземпляром по желанию.

Если я выполняю вызов объекта в очередь, как это можно проверить?

Конечно, обе эти ситуации не нужны, если я выполняю сквозные интеграционные тесты, но я бы предпочел не нуждаться в очереди сообщений или SMTP-сервере для запуска моих тестов.

Итак, мой вопрос: Как смоделировать игру! контроллеры и/или модели для облегчения тестирования взаимодействия с внешними службами?

-121--1365757-

События перемещения мыши в NCurses Интересно, есть ли в NCurses такое явление, как события перемещения мыши, и есть ли способ их уловить. После интерфейса с мышью (из NCurses программирование HOWTO) кажется, что...

Интересно, есть ли в NCurses такое явление, как события движения мышей, и есть ли способ их поймать. После взаимодействия с мышью (из NCurses программирование HOWTO ) кажется, что, включив бит REPORT _ MOUSE _ ПОЗИЦИЯ в вызове mousemask , можно действительно перехватить события перемещения мыши.

Я пытался, и это, кажется, не работает. У меня есть что-то вроде этого:

int ch, count=0;
mmask_t old;

initscr ();
noecho ();
cbreak ();
mousemask (ALL_MOUSE_EVENTS | REPORT_MOUSE_POSITION, &old);
keypad (stdscr, TRUE);

while ((ch = getchar ()) != 'q')
{
  count++;
  if (ch == KEY_MOUSE)
  {
     MEVENT event;
     assert (getmouse (&event) == OK);
     mvprintw (0, 0, "Mouse Event!\n");
  }
  mvprintw (1, 1, "Event number %4d",count);
}

...

Я ожидал, что по мере перемещения курсора мыши я увижу увеличение счетчика событий. Но это не так. Я также попытался переместить его, пока кнопка мыши 1 вниз, чтобы увидеть, генерирует ли «перетаскивание» событий, и он также ничего не сделал. Вопрос в том,если это просто проблема моего эмулятора терминала? Или, может быть, я не понимаю, что NCurses рассматривает как события движения мыши? Все остальные события мыши были получены (и я могу управлять программами в консоли, которые используют мышь).

Я попробовал gnome-terminal, xterm и некоторые другие вещи. Я также попробовал текстовую среду (без X), перейдя к tty моей linux машины (Fedora 15, Ctrl + Alt + F2) и это не сработало.

Наконец, предполагая, что я правильно понимаю, и эти события должны быть сообщены, что такое bstate поле MEVENT для события движения мыши?

Большое спасибо заранее!

11
задан Barak Itkin 18 September 2011 в 16:38
поделиться