对于所有测试,不要为意外做好准备。从你所知道的开始。出乎意料的会很快抬起它丑陋的脑袋,告诉你还应该测试什么。
如果你把它拆开,你所拥有的实际上很容易测试。这是我的方法:
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 ...
}
等等。基本思想是将每个流程步骤的输入和输出放入一个常量,然后运行实现每个预期输入的流程步骤的代码并验证输出。大多数输出也是其他测试的输入。
如果发生变化,您将相应地更新输入/输出。运行测试。失败会告诉您必须更新哪些流程步骤。