Что касается всех тестов, не планируйте неожиданные. Начните с того, что вы знаете. Непредвиденный скоро поднимет свою уродливую голову достаточно, чтобы сказать вам, что еще вы должны проверить.
То, что у вас есть, на самом деле просто проверить, если разбить его на части. Вот мой подход:
public final static String SERVER_DATA = "Prepared data from the server";
@Test
public void testServerPreparesDataCorrectly() throws Exception {
... usual setup ...
String actual = server.handleRequest( CLIENT_REQUEST );
assertEquals( SERVER_DATA, actual );
}
public final static String CLIENT_REQUEST = "...";
@Test
public void testClientRequest() throws Exception {
... usual setup ...
String actual = client.getRequestData(...);
assertEquals( CLIENT_REQUEST, actual );
}
@Test
public void testClientResponseProcessing() throws Exception {
... usual setup ...
client.parseServerResponse( SERVER_DATA );
... verify client state ...
}
и так далее. Основная идея состоит в том, чтобы поместить входные и выходные данные каждого шага процесса в константу, а затем запустить код, который реализует шаг процесса для каждого ожидаемого ввода, и проверить вывод. Где большинство выходов также являются входами для других тестов.
Если что-то меняется, вы соответственно обновляете входы / выходы. Запустите тесты. И ошибки скажут вам, какие этапы процесса вы должны обновить.