java - Reserve-port-plugin 与新的 ServerSocket(0) 进行测试

标签 java maven sockets

我有 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/

相关文章:

java - 何时创建 Maven 子模块

c# - SendAsync何时完成?

c - 为什么这个 C 程序(使用套接字和文件处理)在文件末尾添加不需要的字符?

java - Java中的ThreadFactory使用

java - 使用 JAVA + Java 小程序从多个 USB 摄像头捕获视频并在 UI 中并排显示

java - 如何在某些情况下允许忽略 javax.validation

maven - 如果设置了skipITs,如何跳过maven阶段预集成测试?

java - 添加了 Maven 依赖项,Eclipse 看不到它

c - 通过c中的套接字从结构传递字符

Java TCP 客户端重复连接导致 EMFILE 错误