【发布时间】:2018-03-15 06:47:41
【问题描述】:
我正在 Android 代码库中运行此测试。我的目标方法依赖于另一种检查网络连接的方法。由于网络连接检查具有 Android 依赖项,因此我尝试模拟该方法。尽管如此,它仍在执行,我得到了一个使用 Android 上下文方法的 NPE。我已经尝试过 Roboelectric 和 Junit 跑步者。
import android.content.Context;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.robolectric.RobolectricTestRunner;
import org.robolectric.annotation.Config;
import static org.junit.Assert.*;
import static org.mockito.Matchers.any;
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;
@RunWith(RobolectricTestRunner.class)
@Config(manifest = Config.NONE)
@PrepareForTest({Network.class, Messages.class})
public class MessagesTest {
@Test
public void getStatus() throws Exception {
PowerMockito.mockStatic(Network.class);
when(Network.isConnected(any(Context.class))).thenReturn(false);
String s = Messages.getStatus(mock(Context.class));
assertEquals(s, "offline");
}
}
public class Messages {
public static String getStatus(Context context){
if(Network.isConnected(context)) return "online";
else return "offline";
}
}
public class Network {
private static final String MOBILE = "MOBILE";
private static final String WIFI = "WIFI";
public static boolean isConnected(Context context) {
boolean isWifiConnected = false;
boolean isMobileConnected = false;
ConnectivityManager connectivityManager = (ConnectivityManager) context.getSystemService(Context.CONNECTIVITY_SERVICE);
NetworkInfo[] allNetworkInfo = connectivityManager.getAllNetworkInfo();
for (NetworkInfo networkInfo : allNetworkInfo) {
if (networkInfo != null && WIFI.equalsIgnoreCase(networkInfo.getTypeName())) {
isWifiConnected = networkInfo.isConnectedOrConnecting();
}
if (networkInfo != null && MOBILE.equalsIgnoreCase(networkInfo.getTypeName())) {
isMobileConnected = networkInfo.isConnectedOrConnecting();
}
}
return isWifiConnected || isMobileConnected;
}
}
NPE 被抛出在 Network 类中,其中正在调用 context.getSystemService()。
【问题讨论】: