Я хочу протестировать свою игру, написанную на slick2d (которая построена на LWJGL), с помощью теста Junit. (Может быть, это плохая идея выполнить модульный тест, но я выбрал его как домашнюю работу .) Я запускаю игру в отдельном потоке и имитирую клик мышью и делаю тесты. Это хорошо, пока у меня не будет более одной тестовой функции. (Я скопировал и вставил функцию «тест» во вторую функцию). Создание другого игрового контейнера и фактической игры во второй тестовой функции приводит к сбою моего теста. Думаю, мне нужно как-то сбросить контекст игры после тестов, но я понятия не имею, как это сделать.Испытание Slick unit - ошибка при повторном запуске игры
Вот мой тест: (я упростил его как можно больше)
@Test
public void test() throws InterruptedException {
Thread t = new Thread(new engineTest());
t.start();
Thread.sleep(3000); // wait for game to initialize
// Game simulation and asserts are here
t.interrupt();
Thread.sleep(1000);
}
Я пробовал много вариантов, включая вызов .exit() и .destroy() к игре контейнеру, но он снова упал.
А функция нить здесь:
public class engineTest implements Runnable {
@Override
public void run() {
SapiensSlick.main(null); // SapiensSlick is name of the game
}
}
И я получаю эту ошибку, когда вторая функция выполняется:
[xcb] Unknown request in queue while dequeuing
[xcb] Most likely this is a multi-threaded client and XInitThreads has not been called
[xcb] Aborting, sorry about that.
java: ../../src/xcb_io.c:179: dequeue_pending_request: Předpoklad „!xcb_xlib_unknown_req_in_deq“ nesplněn.
hello
Tue Apr 28 10:50:07 CEST 2015 INFO:Slick Build #237
Testsuite: JunitTest
Tests run: 1, Failures: 0, Errors: 1, Skipped: 0, Time elapsed: 0 sec
Testcase: JunitTest:test: Caused an ERROR
Forked Java VM exited abnormally. Please note the time in the report does not reflect the time until the VM exit.
junit.framework.AssertionFailedError: Forked Java VM exited abnormally. Please note the time in the report does not reflect the time until the VM exit.
at org.netbeans.core.execution.RunClassThread.run(RunClassThread.java:153)
Я не нашел решение, поэтому я в конечном итоге побежал в одной теме и проверил в другом. –