我是使用Mockito进行Android测试的初学者

时间:2019-06-30 11:52:51

标签: android testing mockito

我想使用模拟和单元测试来测试此方法

公共类CurrentIP {

public static String getIPAddress() {
    try {
        List<NetworkInterface> interfaces = Collections.list(NetworkInterface.getNetworkInterfaces());
        for (NetworkInterface intf : interfaces) {
            List<InetAddress> addrs = Collections.list(intf.getInetAddresses());
            for (InetAddress addr : addrs) {
                if (!addr.isLoopbackAddress()) {
                    String sAddr = addr.getHostAddress();
                    boolean isIPv4 = sAddr.indexOf(':') < 0;
                    if (isIPv4)
                        return sAddr;
                }
            }
        }
    } catch (Exception ignored) {
    } // for now eat exceptions
    return "";
}

1 个答案:

答案 0 :(得分:0)

创建一个类IpAddressProviderNetworkInterfaceProvider

NetworkInterfaceProvider有一个方法getNetworkInterfaces(),它从List<NetworkInterfaces>返回NetworkInterface

NetworkInterfaceProviderIpAddressProvider的依赖项,它通过构造函数传递并存储在私有字段ipAddressProvider中。

IpAddressProvider有一个公共方法getIPAddress(),其中它调用ipAddressProvider.getNetworkInterfaces(),并以您发布的静态方法进行处理。

现在,您可以通过提供getIPAddress的虚假实例来测试IpAddressProvider的方法NetworkInterfaceProvider,在其中您可以提供要控制的NetworkInterfaces的模拟列表。

mockedIpAddressProvider = Mockito.mock(NetworkInterfaceProvider.class);
ipAddressProviderWhichYouWantToTest = IpAddressProvider(mockedIpAddressProvider);

例如:

在测试中,您对伪造的NetworkInterfaceProvider实例进行硬编码以返回一个空列表。

Mockito.when(mockedIpAddressProvider.getNetworkInterfaces()).thenReturn(emptyList)

然后,您期望getIPAddress()方法返回空字符串

assertEquals("",ipAddressProviderWhichYouWantToTest.getIPAddress());