有什么办法可以 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();
最佳答案
Is 234324.32423.234234.324234 a valid InetAddress?
没有。
它不是有效的 IPv4 地址,因为 4 部分 IPv4 地址中的数字是 0 到 255 范围内的十进制数字。
它不会解析为 IPv6 地址,因为 IPv6 地址的组成部分是用冒号而不是点分隔的。 (另一种 IPv6 格式具有冒号和点……但至少始终存在一个冒号。)
引用文献:
- https://docs.oracle.com/javase/8/docs/api/java/net/Inet4Address.html#format
- https://docs.oracle.com/javase/8/docs/api/java/net/Inet6Address.html#format
In my local environment, it returns null. But when migrated to cloud, it seems to return a valid address.
它应该始终返回null
。根据 javadocs,这不是一个有效的 IP 地址字符串。 (“迁移到云端”是什么意思?您是否要将代码翻译成其他语言?)
Is this possible? Is InetAddress platform dependent?
不应该,而且不1。
根据记录,OpenJDK 中的 IPv4 地址解析确实检查组件编号的范围。
<小时/>1 - 至少对于任何符合规范的最新版本的 Java 来说不是这样。不兼容的实现可能会这样,但它就不是 Java(tm)。
关于java - 234324.32423.234234.324234 是有效的 InetAddress 吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29096535/