在包含Android软件包的实用工具类方法上运行JUnit测试

时间:2019-04-09 06:19:08

标签: android junit

伙计,我是Android测试的新手。

我想知道是否可以在JUnit测试中测试以下方法?

或在没有运行模拟器的情况下测试这种特定于Android的其他最佳实践。

public class NetworkUtils {

    private final Context context;

    public NetworkUtils(Context context) {
        this.context = context;
    }

    /**
     * Indicates whether network connectivity exists and it is possible to establish
     * connections and pass data.
     *
     * @return flags indicate the network connectivity ready or not to make connection.
     */
    public boolean hasNetworkConnection() {
        ConnectivityManager connectivityManager = (ConnectivityManager)
                context.getSystemService(CONNECTIVITY_SERVICE);

        NetworkInfo activeNetworkInfo = connectivityManager.getActiveNetworkInfo();
        return activeNetworkInfo != null && activeNetworkInfo.isConnected();
    }
}

1 个答案:

答案 0 :(得分:0)

您可以尝试使用Robolectric来模拟/存根Android API以进行单元测试,但是老实说,我会怀疑这是否是您应该尝试验证的逻辑在单元测试中。

之所以这么说,是因为该方法中的所有内容都是特定于Android框架的,为什么还要负责测试Android框架代码?

我认为,您应该尝试将这样的Android功能与您自己的业务逻辑(您可以控制的东西)分开,并简单地模拟期望成功或失败的响应。这意味着您无需直接测试此方法,而只需测试其效果(即whenNoNetworkConnection_thenSomethingHappenswhenNetworkConnection_thenSomethingElseHappens)。

为此,我建议使用Mockito库。