首页 > 解决方案 > 使用 JUnit 调用 Activity 构造函数没有引发运行时异常?

问题描述

我正在运行测试并尝试一些东西,并注意到一个奇怪的行为。

@Test
public void setupActivity()
{
    Activity activity = new Activity();
}

上面的测试运行成功,没有抛出运行时异常。

@Test
public void setupActivity()
{
    Activity activity = new Activity();
    activity.isFinishing();
}

而这个抛出了 isFinishing() 方法的运行时异常。

为什么调用构造函数没有抛出异常?当我查看 android.jar 中 Activity.class 的代码时,包括构造函数在内的所有方法都应该引发运行时异常。

public Activity() {
    throw new RuntimeException("Stub!");
}

public boolean isFinishing() {
    throw new RuntimeException("Stub!");
}

JUnit 跑步者有问题吗?我正在使用 JUnit4 来运行我的测试。

标签: javaandroidandroid-activityjunitjunit4

解决方案


为什么调用构造函数没有抛出异常?

因为创建 an 的实例Activity是合理且必要的。Activity该框架将根据startActivity()请求、配置更改等根据需要通过其构造函数创建您的实例。

当我查看 android.jar 中 Activity.class 的代码时,包括构造函数在内的所有方法都应该引发运行时异常。

您正在查看android.jarAndroid SDK 中的反编译版本。那不是在运行时使用的类。运行时使用的版本Activity将基于设备上的 Android 版本,可能还会由设备制造商进行调整。例如,这里是 Android 9.0 版本的Activity.


推荐阅读