gpt4 book ai didi

java - Android 单元测试 - Android 类的运行时异常

转载 作者:行者123 更新时间:2023-12-01 11:58:41 24 4
gpt4 key购买 nike

我正在开发一个 SDK,并尝试对其执行单元测试。这意味着我的项目大部分是纯java代码,其中某些地方涉及Android代码。我想在我的 SDK 上执行 UnitTest,并决定使用 Roboelectric、Mockito 和 PowerMock(用于静态方法模拟)。

一切正常,除了一个问题:当我的测试调用任何包含 Android 类的方法时,我的测试崩溃(由于 stub 问题)。我知道我无法测试 Activity、Views 和更多类,但问题是即使我的函数包含 Log 类的使用,我也会收到 RuntimeException。

我该如何处理这个问题?我决定使用纯 UnitTest,因为我的大部分代码不包含除 Log 类之外的 Android 类。通过使用纯java UnitTest,我不需要任何设备来运行,因此我可以同时执行多个测试任务。

我尝试将 android.jar 文件包含在我的 gradle 中,但没有成功。

我该怎么办?1.坚持纯Java UnitTest:那么我如何忽略/导入Log指令。2. 转向 Android 测试框架:什么最适合我的需求?

这是我的 gradle 文件中与测试相关的部分:

    robolectric {
// configure the set of classes for JUnit tests
include '**/*UnitTest.class'


// confgure max heap size of the test JVM
maxHeapSize = '2048m'

// configure the test JVM arguments
jvmArgs '-XX:MaxPermSize=512m', '-XX:-UseSplitVerifier'

// configure whether failing tests should fail the build
ignoreFailures true

// use afterTest to listen to the test execution results
afterTest { descriptor, result ->
println "Executing test for {$descriptor.name} with result: ${result.resultType}"
}
}

dependencies {
androidTestCompile 'org.robolectric:robolectric:2.3'
androidTestCompile 'junit:junit:4.10'

androidTestCompile 'org.mockito:mockito-core:1.8.5'
androidTestCompile 'org.powermock:powermock-mockito-release-full:1.4.9'
androidTestCompile files('../libs-test/json.jar')
}

这是 TestCase 类的示例:

import android.util.Log;


import junit.framework.TestCase;

import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.api.mockito.PowerMockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;
import org.junit.Test;
import org.json.JSONObject;

import static org.powermock.api.mockito.PowerMockito.when;


@RunWith(PowerMockRunner.class)
@PrepareForTest(StaticInClass.class)
public class ClassExampleUnitTest extends TestCase{


@Test
public void testSimple(){
Log.d("UnitTest", "test");
assertTrue(true);
}


}

最佳答案

当您使用 PowerMockRunner 运行时,您实际上并不是在通过 robolectric 运行。通常,当您需要 robolectric 框架时,您会像这样运行:

@RunWith(RobolectricTestRunner.class)

关于java - Android 单元测试 - Android 类的运行时异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28148597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com