Предварительные условия: Я использую последнюю версию Play! framework и версия Java (не Scala).
Мне нужно опубликовать сообщение в очереди сообщений, когда пользователь создан, и я хотел бы проверить это поведение. Моя проблема в том, чтобы сделать это легко проверяемым.
В других рамках то, что я бы сделал, было бы использовать инъекцию конструктора в контроллер и пройти в издевательской очереди в моих тестах; однако, с Play! диспетчеры статичны, который означает, что я не могу сделать новый MyController (mockedQueue)
в моих тестах.
Я мог бы использовать Google Guice и поместить заметку @ Inject
на статическое поле в моем контроллере, но это не очень приятно для меня, так как это либо означает, что я должен сделать поле общедоступным для замены в тесте, либо я должен использовать контейнер в своих тестах. Я бы предпочел использовать инъекцию конструктора, но играй! кажется, не способствует этому.
Часто говорят, что ваша логика должна быть в вашей модели, а не в геймпаде. Это имеет смысл; тем не менее, мы не в Ruby здесь, и взаимодействие ваших сущностей с внешними службами (электронная почта, очереди сообщений и т.д.) значительно менее проверяемо, чем в динамической среде, где вы можете просто заменить статические вызовы StartQueue
издевательским экземпляром по желанию.
Если я выполняю вызов объекта в очередь, как это можно проверить?
Конечно, обе эти ситуации не нужны, если я выполняю сквозные интеграционные тесты, но я бы предпочел не нуждаться в очереди сообщений или SMTP-сервере для запуска моих тестов.
Итак, мой вопрос: Как смоделировать игру! контроллеры и/или модели для облегчения тестирования взаимодействия с внешними службами?
-121--1365757-
Интересно, есть ли в 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
для события движения мыши?
Большое спасибо заранее!