【问题标题】:How would I test a web server in Java?如何在 Java 中测试 Web 服务器?
【发布时间】:2012-10-23 18:13:17
【问题描述】:
我基本上是通过构建客户端和服务器(不一定是 HTTP 服务器)来练习 Java 套接字编程。简而言之,客户端通过套接字向服务器发送请求,服务器将请求添加到任务队列。线程池最初有一定数量的线程,每个空闲线程都分配给任务队列中的一个可运行任务。我的 Web 服务器也有一个简单的存储,用于存储和检索磁盘文件中的数据。在这个项目中,我必须处理几个并发问题。
基本上,我必须构建客户端、服务器、线程池、处理程序、存储。但是,我想以一种良好的系统方式进行彻底的测试(单元测试、集成测试等)。我在测试方面没有太多经验,所以我正在寻找指针、方法、框架或教程。 (我使用 Ant 进行自动化构建,最初考虑使用 JUnit 和 EasyMock 进行测试)
【问题讨论】:
标签:
java
unit-testing
testing
tdd
webserver
【解决方案1】:
在测试之前,我会先编写一些粗略且现成的原型代码。只是为了看看它的工作情况并感受一下我将使用的 API。
然后介绍一些使用 JUnit 的单元测试(还有其他框架,但 JUnit 无处不在,您会发现很多教程可以帮助您入门)。
如果您的对象需要与其他一些对象交互以完成其任务,则使用模拟(EasyMock 或其他)来提供交互 - 这可能会导致一些重构。
一旦你满意了,你就可以开始测试你的对象是如何交互的,你可以编写新的(集成)测试来用真实的东西代替 Mocks。更大的交互会导致更大的复杂性。
需要记住的一些事情
- 琐碎的方法不值得测试(例如简单的访问器)
- 100% 覆盖是浪费时间
- 任何测试都比没有好
- 单元测试比集成测试更容易实现
- 并非所有测试都有效
- 测试多线程应用程序很困难
有一本书介绍了 Google 如何进行测试。基本上,他们在看起来可行之前不会编写测试。他们有工程师就如何构建测试代码提供建议。重点是:
- 可运行的代码是目标
- 测试增加了这个目标,但不要取代它
- 编写可测试的代码是一项学习技能