我现在正在寻求帮助,将TDD用作真实世界的例子.大多数节目过于简单,并没有真正展示如何测试和重新考虑更复杂的类.以下是使用线程和网络套接字的代码示例.有人可以解释如何为这样的类创建一个独立的单元测试吗?谢谢.
public class BaseHandler extends Thread {
protected Socket mClientSocket;
protected BufferedReader is = null;
protected BufferedWriter os = null;
private Logger mLogger = Logger.getLogger(WebTestController.class.getName());
protected WebTestController mWebTestController;
/*********************************************************************
*
* @param piPort - int port to listen on
*/
public BaseHandler(){
}
/*********************************************************************** cleanup
* Ensure sockets are closed as to not run into bind errors
*/
protected void cleanup() {
try {
if (is != null)
is.close();
if (os != null)
os.close();
if (mClientSocket != null)
mClientSocket.close();
}
catch (IOException e) {
e.printStackTrace();
}
mLogger.info("cleaning up a socket");
}
/***********************************************************************************
* Sends a message to the current socket
* @param pMessage
*/
protected void writeToSocket(String pMessage){
try {
os = new BufferedWriter(
new OutputStreamWriter(mClientSocket.getOutputStream()));
}
catch (IOException e) {
e.printStackTrace();
cleanup();
return;
}
try {
os.write(pMessage,pMessage.length());
os.flush();
}
catch (IOException e) {
e.printStackTrace();
}
cleanup();
}
}
最佳答案
以下是一些减少测试问题的实际操作:
>不要让你的类继承Thread.改为使其成为Runnable,因为您可以单独测试Runnable.
>使用dependency injection,以便可以用测试版本替换Logger和WebTestController(请参阅“模拟”).
>从您的代码中删除任何尚未执行任何操作的内容.然后测试你拥有的东西.只有当您实施的所有内容都正常工作且具有有效测试证明时,才添加新内容
但是我强烈建议您阅读一本关于TDD和单元测试的好书.简单的教程就是这么简单.它们不包括您将在现实生活中遇到的复杂案例.在现实生活中使用TDD是完全可能的,但它确实需要一些知识 – 就像编程一样.