gpt4 book ai didi

java - 如何模拟 java.net.NetworkInterface?

转载 作者:搜寻专家 更新时间:2023-11-01 03:47:33 26 4
gpt4 key购买 nike

我要测试一个将 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 地址、网络掩码和接口(interface)名称和网关,我不想使用 NetworkInterface 因为所有这些限制他们只是建议“你不被允许触摸这个”!P.S:我想知道为什么 Oracle 人员对 final abstract 很着迷,我知道他们比我知道的更多,但是在 NetworkInterface 的这个特殊情况下,为什么是 final abstract?使用一个单一的综合构造函数将使该类也不可变

最佳答案

您可以使用 PowerMockito 模拟 java 标准库 final 类。

例如;

@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 - 如何模拟 java.net.NetworkInterface?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41415444/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com