我正在尝试学习在Android上进行基本的JUnit和Mockito测试。我正在尝试为一个简单的类编写单元测试,这个类代表需要位置信息的活动处理从位置服务查找用户位置的问题。
我一直在尝试创建“假位置”来测试:
@Test
public void testLocationReceived() throws Exception {
Location fakeLocation = new Location(LocationManager.NETWORK_PROVIDER);
fakeLocation.setLongitude(100);
fakeLocation.setLatitude(-80);
...
}
但我得到了错误:
java.lang.RuntimeException: Method setLongitude in android.location.Location not mocked.
我知道Android上的单元测试运行在JVM上,所以你不能访问任何需要操作系统/框架的东西,但这也是其中之一吗?
- 如果是这样的话,你怎么知道什么类可以/不能在JVM上使用?
- 除了基于JVM的单元测试之外,我现在还需要仪器/设备测试来测试这个类吗?
3条答案
按热度按时间3okqufwl1#
您应该在
build.gradle
(app)中添加以下内容:更多详情:http://tools.android.com/tech-docs/unit-testing-support#TOC-Method-...-not-mocked.-
wyyhbhjk2#
我和你有一样的肺结核。@John Huang的回答帮了我。你首先需要模拟的位置,然后使用mockito时,把你想要的值。
别忘了约翰说的
如果你有带import的pb,这里是我的测试依赖项,但我不记得哪个对这个例子很重要,所以请记住,你可能不需要所有的
ztigrdn83#
使用Robolectric测试转轮为我解决了这个问题。
注意:我不需要
如果您的项目中还没有Robolectric依赖项,请不要忘记添加必要的Robolectric依赖项。