【问题标题】:Android local unit test - new View(null) returns nullAndroid 本地单元测试 - new View(null) 返回 null
【发布时间】:2015-07-22 17:23:53
【问题描述】:

我正在尝试本地 android 测试(在本地 JVM 上运行的测试,而不是在设备上)。我知道 android.jar 中的类不能正确使用,除非它们被模拟,但由于某种原因,当我尝试实例化一个新视图(或我自己的从视图继承的类)时 - 我得到空值。这完全打破了我的信念,即“new”在 Java 中永远不会返回 null。

这是我的测试代码 (src/test/java/com/example/FooTest.java):

package com.example;

import android.view.View;
import org.junit.Test;

public class FooTest {
    @Test
    public void testView() {
        View v = new View(null);
        System.out.println("view = " + v);
    }
}

此代码在测试报告输出中显示视图为空。

这是我的 build.gradle(项目的其余部分只是由 android create project 生成的,不感兴趣):

buildscript {
    repositories {
        jcenter()
    }
    dependencies {
        classpath 'com.android.tools.build:gradle:1.3+'
    }
}
apply plugin: 'android'

android {
    compileSdkVersion 'android-22'
    buildToolsVersion '23.0.0 rc2'

    buildTypes {
        release {
            minifyEnabled false
            proguardFile getDefaultProguardFile('proguard-android.txt')
        }
    }

    testOptions {
        unitTests.returnDefaultValues = true
    }
}

repositories {
    jcenter();
}

dependencies {
    testCompile 'junit:junit:4.12+'
}

谁能提供一些关于这里发生了什么样的魔法的线索?

【问题讨论】:

  • 我应该关闭它,否则它可能会为其他没有考虑隐式模拟 toString() 方法的人服务?

标签: java android unit-testing null


【解决方案1】:

此代码仅说明字符串表示形式(即参见 ViewtoString())是“null”,而不是 vnull

AFAIK,new Something() 在 java 中是 从不 null

【讨论】:

  • 是的,你是对的。 returnDefaultValues 告诉从每个未模拟的方法(即 toString())返回默认值,因此它返回 null。奇怪的是我没有想到。
  • 我不确定我是否理解你,发布的代码中没有任何模拟!?
  • 好吧,我没有使用 mockito 或任何其他模拟。然而,android 单元测试框架为测试提供了一个android.jar mock,它为所有 android 类提供了所有空方法。所以我不会明确地模拟视图。
  • 前段时间 SDK 中的 android.jar 在桌面 JVM 上使用时会引发运行时异常。现在可以将其配置为抛出异常或在每个方法中返回默认值。
猜你喜欢
  • 2020-06-14
  • 1970-01-01
  • 1970-01-01
  • 2020-11-02
  • 1970-01-01
  • 2020-07-20
  • 1970-01-01
  • 2016-06-29
  • 2014-08-10
相关资源
最近更新 更多