如何模拟java.net.NetworkInterface?
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了如何模拟java.net.NetworkInterface?,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2076字,纯文字阅读大概需要3分钟。
内容图文
![如何模拟java.net.NetworkInterface?](/upload/InfoBanner/zyjiaocheng/767/71b8182a953946e3be730a22304dca20.jpg)
我将测试一个以java.net.NetworkInterface列表作为参数的方法,因此我应该模拟最终的抽象类或实例化它.
关于做这些的任何想法?
方法是这样的:
public void handleInterfaces(List<NetworkInterface> interfaces){
for(NetworkInterface interface : interfaces){
//get interface mac address
//get interface name
//doSomething here;
}
}
为每个getter方法编写一个mockito-when有点难看,所以我想我应该用构造函数编写我自己的这个POJO类的版本.在这之前,我想知道是否有更好的方案来做这样的事情:
NetworkInterface mockedInterface = instantiateTheInterface("eth1",192.168.1.1,theMacAddress);
我坚持“永远不要使用powermockito”的规则,所以我只是实现了一个包装类,我认为它是最干净的方式:
public class NetworkInterfaceWrapper{
private NetworkInterface networkInterface;
public NetworkInterfaceWrapper(NetworkInterface networkInterface){
this.networkInterface = networkInterface;
}
public String getName(){
return networkInterface.getName();
}
...and so on for all Getters i've used from NetworkInterface
}
最终解决方案
事实证明,在NetworkInterface中还有另一个恼人的对象,叫做InterfaceAddress,我应该为它编写另一个包装器!
所以我将使用shell命令来检索主机的mac地址,网络掩码和接口名称以及网关,我不想使用NetworkInterface因为所有这些限制他们只是建议“你不允许触摸这个”!
P.S:我想知道为什么甲骨文家伙最终会痴迷于最后的抽象,我知道他们比我知道的更多,但在这个特殊的NetworkInterface案例中,为什么最终抽象?使用单个综合构造函数会使类成为不可变的
解决方法:
您可以使用PowerMockito来模拟java标准库最终类.
例如;
@RunWith(PowerMockRunner.class)
@PrepareForTest({ NetworkInterface.class })
public class NetworkInterfaceMocks {
@Test
public void sameClassSuccess() throws Exception {
final NetworkInterface mockInterface = PowerMockito.mock(NetworkInterface.class);
when(mockInterface.isUp()).thenReturn(true);
assertTrue(mockInterface.isUp());
}
@Test
@PrepareForTest(OtherClass.class)
public void differentClassSuccess() throws Exception {
final NetworkInterface mockInterface = PowerMockito.mock(NetworkInterface.class);
when(mockInterface.isUp()).thenReturn(true);
assertTrue(new OtherClass().isUp(mockInterface));
}
在我看来,它应该只用于非常罕见和不可避免的情况.
内容总结
以上是互联网集市为您收集整理的如何模拟java.net.NetworkInterface?全部内容,希望文章能够帮你解决如何模拟java.net.NetworkInterface?所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。