有什么办法吗? InetAddress.getByName(234324.32423.234234.324234) 将返回非空地址值? 似乎就是这样。
由于这在单元测试中发生,我所要做的就是强制InetAddress抛出异常。以下使用PowerMock进行模拟的原因是否有任何原因?我的班级签名之前我有注释@RunWith(PowerMockRunner.class)和@PrepareForTest({InetAddress.class})
String testIp = "127.0.0.1";
PowerMockito.mockStatic( InetAddress.class );
PowerMockito.when( InetAddress.getByName( testIp ) ).thenThrow( UnknownHostException.class );
MyClass someClassThatCallsInetAddressGetByName = new MyClass( 32 );
someClassThatCallsInetAddressGetByName.setHostAddress( testIp );
someClassThatCallsInetAddressGetByName.getHostAddress();

答案 0 :(得分:4)
234324.32423.234234.324234是否是有效的InetAddress?
没有。
它不是有效的IPv4地址,因为4部分IPv4地址中的数字是0到255范围内的十进制数。
它不会解析为IPv6地址,因为IPv6地址的组件由冒号而不是点分隔。 (替代的IPv6格式有冒号和点......但总是至少有一个冒号。)
参考文献:
在我的本地环境中,它返回null。但是当迁移到云时,它似乎返回了一个有效的地址。
应始终返回null
。根据javadocs,这不是有效的IP地址字符串。 (“迁移到云”是什么意思?您是否将代码翻译成其他语言?)
这可能吗? InetAddress平台是否依赖?
它不应该是,而且
对于记录,OpenJDK 中的IPv4地址解析检查组件编号的范围。
1 - 至少不适用于符合规范的任何最新版本的Java。一个不合规的实现可能,但它不会是Java(tm)。
答案 1 :(得分:0)
不是100%肯定,但您的地址可能被解析为IPv6。在你的本地环境中,你没有这样的解决方案,但在云端有人回应它吗?
根据文档here,getByName也可以解析为IPv6。