gpt4 book ai didi

java - 使用 Java 帮助现实世界的 TDD

转载 作者:搜寻专家 更新时间:2023-10-31 08:21:10 25 4
gpt4 key购买 nike

我现在正在寻求帮助,以将 TDD 用于真实世界的示例。大多数节目都太简单了,并没有真正展示如何测试和重构更复杂的类。下面是一个同时使用线程和网络套接字的代码示例。有人可以解释如何为这样的类(class)创建一个独立的单元测试吗?谢谢。

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, 0, pMessage.length());
os.flush();
}
catch (IOException e) {
e.printStackTrace();
}
cleanup();
}

}

最佳答案

这里有一些实用的方法可以减少您的测试问题:

  1. 不要让您的类继承 Thread。改为将其设为 Runnable,因为您可以单独测试 Runnable。
  2. 使用dependency injection这样您就可以用测试版本替换 Logger 和 WebTestController(请参阅“模拟”)。
  3. 从您的代码中删除任何尚未执行任何操作的内容。然后测试你有什么。仅当您实现的所有内容都正常工作并且有有效的测试来证明它时才添加新内容

不过,我强烈建议您阅读一本关于 TDD 和单元测试的好书。简单的教程就是这么简单。它们不涵盖您在现实生活中会遇到的复杂案例。在现实生活中使用 TDD 是完全可能的,但它确实需要一些知识 - 就像编程一样。

关于java - 使用 Java 帮助现实世界的 TDD,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5312364/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com