当前位置: 首页 > 知识库问答 >
问题:

Looper不被嘲笑 视图模型 模拟JUnitRunner

陶刚豪
2023-03-14

我找不到有助于测试我的< code>ViewModel的解决方案。我一直认为添加规则就足够了:

 @get:Rule
 var rule: TestRule = InstantTaskExecutorRule()

但我不断得到:

java.lang.RuntimeException: Method getMainLooper in android.os.Looper not mocked. See http://g.co/androidstudio/not-mocked for details.

我的测试类现在看起来像这样:

@RunWith(MockitoJUnitRunner::class)
class MainActivityViewModelTest {

@get:Rule
val taskExecutorRule = InstantTaskExecutorRule()

val weatherProviderMock = mock<WeatherProvider>()
val sut = MainActivityViewModel(weatherProviderMock, mock(), mock(),     mock())

    @Test
    fun shouldPass() {
        assertTrue(true)
    }
}

我也有以下在我的应用程序build.gradle:

testImplementation 'junit:junit:4.12'
testImplementation "android.arch.core:core-testing:1.1.1"
testImplementation 'org.mockito:mockito-core:2.22.0'
testImplementation 'org.assertj:assertj-core:3.9.1'
testImplementation 'com.nhaarman:mockito-kotlin:1.6.0'
testImplementation 'org.mockito:mockito-inline:2.22.0'

任何帮助非常感谢。

@克里斯

您能告诉我以下代码是否有问题吗(根据您提出的解决方案):

lateinit var sut: SummaryViewModel
@get:Rule
val rule: TestRule = InstantTaskExecutorRule()

@Before
fun setUp() {
    sut = SummaryViewModel(calculatorMock, mock(), mock(), mock(), providerMock, mock())
}

@Test
fun `live data test`() {
    val someLiveData = sut.someLiveDataValue
    assertThat(true).isTrue()
}

共有2个答案

微生翼
2023-03-14

如果在我的案例中没有一个解决方案的工作原理相同,如果您使用的是更高版本的Gradle,并且您正在使用androix,请确保在构建级表中从androix导入。

“androidx.arch.core:核心测试:$version”的实现

代替

实现“android.arch.core:核心测试:$version”

太叔英锐
2023-03-14

您可以使用 Kotlin 委托懒洋洋地初始化视图模型

    val viewModel by lazy { 
        MainActivityViewModel(weatherProviderMock, mock(), mock()...)
    }
 类似资料:
  • 我目前正在做一个小项目,作为Java测试课程的实习,我们试图看看mocking是如何工作的。 我们的目标是看到我们可以忽略我们所嘲笑的类中的错误。 正如您在Collaborateur中看到的,缺少一个“;”在System.Out之后,exercice的目标是表明嘲笑这个类可以让我们忽略这个错误。我的一些同事使用Eclipse时,使用“以JUnit形式运行”功能没有问题。 在Intellij中,我没

  • 我提到了这个答案,我该如何模拟java。时间本地日期。now()关于如何模拟我的LocalDateTime。now()调用。我基本上遵循了所有步骤,但只使用了LocalDateTime而不是LocalDate。 我的代码的功能是这样的,它应该只在一小时的第15或45分钟运行。因此,我将LOCAL\u DATE\u TIME静态变量设置为: 然后在我的@Before测试方法中,我有以下内容: 这是2

  • 本文向大家介绍wpf 视图模型,包括了wpf 视图模型的使用技巧和注意事项,需要的朋友参考一下 示例 视图模型是MV VM中的“ VM” 。这是一个充当中介的类,将暴露model(s)给用户界面(视图),并处理来自视图的请求,例如单击按钮引发的命令。这是一个基本的视图模型: 构造函数创建一个Customer模型对象,并将其分配给CustomerToEdit属性,以使视图可见。 构造函数还创建一个R

  • 我是viewmodel中的一个简单函数getCreditReport,我试图在其中进行API调用存储库层,我想在viewmodel中测试getCreditReport以检查是否调用了存储库,但我收到以下错误 我尝试过的 主要活动视图模型 数据仓库 单元测试 依赖注入组件-如果这有帮助的话 请提出我做错了什么 谢谢R

  • 问题内容: 首先,我是和的新手。 我有一个实例化的类,我想测试一下。 这是我的代码: 我想测试一下我的功能。我的头,我认为测试fs.existsSync的状态是个好主意。如果返回,则必须调用。所以我尝试写一些测试: 但是,我有一个错误: 您能帮我调试和测试我的功能吗? 问候。 问题答案: 出现错误是因为它正在寻找在您的对象上调用的方法,该方法不存在。如果您可以访问测试中的模块,则可以监视如下方法:

  • 问题内容: 我想嘲笑localStorage方法以进行错误模拟。我在Utility.js中定义了localstorage getter和setter方法。我想嘲笑在调用时抛出错误。 开玩笑, 但是模拟永远不会被调用。我也尝试过 问题答案: 这与Andreas在答案中建议的一致,但是我能够使用Storage接口对其进行模拟。我做了这样的事情 开玩笑, 这次公关讨论也很有帮助。