How to simulate Java net. NetworkInterface?

I'll test one in Java net. The networkinterface list is used as a parameter method, so I should simulate the final abstract class or instantiate it

The method is as follows:

public void handleInterfaces(List<NetworkInterface> interfaces){
    for(NetworkInterface interface : interfaces){
        //get interface mac address
        //get interface name
        //doSomething here;
    }
}

It's a bit ugly to write a mockito when for each getter method, so I think I should write my own version of this POJO class with a constructor Before that, I would like to know if there is a better plan to do such a thing:

NetworkInterface mockedInterface = instantiateTheInterface("eth1",192.168.1.1,theMacAddress);

I adhere to the rule of "never use powermockito", so I just implemented a wrapper class, which I think is the cleanest way:

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
}

The final solution turns out that there is another annoying object in the network interface, called interfaceaddress, for which I should write another wrapper! So I will use the shell command to retrieve the MAC address, netmask, interface name and gateway of the host. I don't want to use networkinterface because of all these restrictions. They just suggest "you're not allowed to touch this"! P. S: I want to know why Oracle guys are obsessed with the final abstraction. I know they know more than I do, but in this special case of networkinterface, why is the final abstraction? Using a single comprehensive constructor makes the class immutable

Solution

You can use powermockito to simulate the Java standard library final class

For example;

@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));
}

In my opinion, it should only be used in very rare and inevitable situations

The content of this article comes from the network collection of netizens. It is used as a learning reference. The copyright belongs to the original author.
THE END
分享
二维码
< <上一篇
下一篇>>