我有 Junit 测试,它启动套接字服务器并向其发送请求。通常我使用 reserve-port-plugin让 Maven 分配随机端口并通过系统属性传递它来测试。但现在我在文档中读到 new ServerSocket(0)
使用“自动分配”端口号分配新套接字。 Javadoc说:
A port number of 0 means that the port number is automatically allocated, typically from an ephemeral port range.
使用 new ServerSocket(0)
看起来比配置 Maven 插件要容易得多,但尚不清楚这种“自动分配”的工作原理如何。例如。它在分配之前检查开放权限吗?在测试中使用这两种方法进行随机端口分配是否相同?
最佳答案
您可以阅读源代码来了解它们是如何工作的,尽管我怀疑每个操作系统都有一些变化,我会警告不要依赖它们。
我认为理解为什么使用其中一种与另一种可能更有用。在小范围内使用 new ServerSocket(0)
更容易,但可能会导致奇怪的绑定(bind)/依赖关系,具体取决于您的测试系统。
例如,如果您想要启动一个完整的 Web 应用程序,并对其运行 selenium 测试,我会推荐 Maven 解决方案。尝试向 servlet 容器提供服务器套接字要么困难且脆弱,要么可能不可能。
另一方面,对于非常封闭的套接字类型测试,new ServerSocket(0)
方法可能更简单。
关于java - Reserve-port-plugin 与新的 ServerSocket(0) 进行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61324504/