Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/215.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/kotlin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Android MVP kotlin中的Mockito测试-然而,与此模拟异常的交互只有1次_Android_Kotlin_Mockito - Fatal编程技术网

Android MVP kotlin中的Mockito测试-然而,与此模拟异常的交互只有1次

Android MVP kotlin中的Mockito测试-然而,与此模拟异常的交互只有1次,android,kotlin,mockito,Android,Kotlin,Mockito,我已经用Kotlin和MVP架构开发了一个应用程序。我想用Mockito进行单元测试,但无法实现。我得到“然而,这个模拟异常只发生了1次交互”。 在我的应用程序中,我使用了5个不同的类 视图-界面 内部接口 内锥类 演讲者-界面 PresenterImpl-类 视图:-它包含传递活动/片段所需的所有方法 内部:它包含结果接口方法 IntractorImpl:-它包含数据库/服务器逻辑,将从Intractor实现 演示者:-它包含访问IntractorImpl类的方法 PresenterImpl:

我已经用Kotlin和MVP架构开发了一个应用程序。我想用Mockito进行单元测试,但无法实现。我得到“然而,这个模拟异常只发生了1次交互”。 在我的应用程序中,我使用了5个不同的类

  • 视图-界面
  • 内部接口
  • 内锥类
  • 演讲者-界面
  • PresenterImpl-类
  • 视图:-它包含传递活动/片段所需的所有方法

    内部:它包含结果接口方法

    IntractorImpl:-它包含数据库/服务器逻辑,将从Intractor实现

    演示者:-它包含访问IntractorImpl类的方法

    PresenterImpl:-它是通过Presenter和Intractor结果方法实现的

    这个架构是我为实现而遵循的,现在为了实现Mockito,我感到困惑,根据我在google上找到的文章,如果我尝试实现,我会得到“但是,与这个模拟异常只有1次交互”

    对于mockito,我使用了以下导入

     //Mockito
    testImplementation "org.mockito:mockito-core:2.24.5"
    testImplementation "org.mockito:mockito-inline:2.24.5"
    
    如果有人知道什么,请帮帮我。我第一次用Mokito。 如果有人需要更多信息,我可以发布。下面是我的代码

    class EventTest {
        @Mock
        val homeActivity = HomeActivity()
        lateinit var eventView: HomeView
        lateinit var eventInteractorImpl: HomeInteractorImpl
        lateinit var eventPresenter: HomePresenter
        lateinit var eventInteractor: HomeInteractor.OnEventsReceivedListener
        @Before
        fun setUpEventPresenter() {
            eventView = mock(HomeView::class.java)
            eventInteractorImpl = mock(HomeInteractorImpl::class.java)
            eventPresenter = HomePresenterImpl(eventView, eventInteractorImpl)
            eventInteractor = mock(HomeInteractor.OnEventsReceivedListener::class.java)
        }
    
        @Test
        fun startEventTest() {
            val testEvents = Event(
                "1",
                "Test",
                "Next week we have the vacation planing in Vizag",
                "This is for test",
                "1",
                "01-10-2019",
                "26-09-2019",
                "8.00",
                "10.47",
                "",
                true
            )
            val events: ArrayList<Event> = ArrayList<Event>()
            events.add(testEvents)
            eventPresenter.getEventsList(homeActivity)
            verify(eventView).showProgress()
            verify(eventView).showEvents(events)
            verify(eventView).hideProgress()
        }
    
    }
    

    在getEvents()方法中,我们正在调用服务器/本地数据库,对于我们正在使用翻新的服务器。

    根据您的代码和您在注释中给出的解释,您得到的错误消息是正确的,因为您正在调用mock
    interactior
    ,它无法调用其他视图函数

    因此,在
    startEventTest()
    中唯一应该验证的是
    verify(eventView).showProgress()
    verify(eventInteractitorImpl).getEvents(any(),any())

    @测试
    有趣的开始{
    val testEvents=事件(
    "1",
    “测试”,
    “下周我们将在维扎格进行度假计划”,
    “这是测试用的”,
    "1",
    "01-10-2019",
    "26-09-2019",
    "8.00",
    "10.47",
    "",
    真的
    )
    val事件:ArrayList=ArrayList()
    添加(测试事件)
    eventPresenter.getEventsList(homeActivity)
    验证(eventView).showProgress()
    验证(EventInteractitorImpl).getEvents(any(),any())
    }
    

    如果您仍然要测试
    verify(eventView).showEvents(events)
    verify(eventView).hideProgress()
    ,而不是mock interactior,您应该创建它的实例。

    根据您在注释中给出的代码和解释,您得到的错误消息是正确的,因为您正在调用mock
    interactitor
    ,它无法调用其他视图函数

    因此,在
    startEventTest()
    中唯一应该验证的是
    verify(eventView).showProgress()
    verify(eventInteractitorImpl).getEvents(any(),any())

    @测试
    有趣的开始{
    val testEvents=事件(
    "1",
    “测试”,
    “下周我们将在维扎格进行度假计划”,
    “这是测试用的”,
    "1",
    "01-10-2019",
    "26-09-2019",
    "8.00",
    "10.47",
    "",
    真的
    )
    val事件:ArrayList=ArrayList()
    添加(测试事件)
    eventPresenter.getEventsList(homeActivity)
    验证(eventView).showProgress()
    验证(EventInteractitorImpl).getEvents(any(),any())
    }
    

    如果仍要测试
    验证(eventView).showEvents(events)
    验证(eventView).hideProgress()
    ,而不是模拟interactior,你应该创建它的实例。

    你能添加getEventsList函数的代码吗?@natigbayev在getEventsList函数中,我正在调用Intractor方法从服务器/本地获取数据database@NatigBabayev我的应用程序MVP几乎与此类似,没有发布
    getEventsList()
    我认为我们无法提供任何关于测试失败原因的帮助。而且,我已经通过了媒体的免费文章限制,所以,我无法检查该帖子:D您可以在此处发布代码。@我已更新代码,请检查一次。您可以添加getEventsList函数的代码吗?@natigbayev在getEventsList函数中,我正在调用Introctor方法从服务器/本地获取数据database@NatigBabayev我的应用程序MVP几乎与此类似,没有发布
    getEventsList()
    我认为我们无法提供任何关于测试失败原因的帮助。另外,我已经通过了中免费文章的限制,因此,我无法检查帖子:D您可以在这里发布代码。@我已经更新了代码,请检查一次。我已经尝试过这个帖子,但仍然无法执行“any()不得为null”异常即将出现。您可以使用mockito kotlin,那么您不应该出现这样的错误。我已经尝试过这个帖子,仍然无法执行“any())“不得为空”异常即将出现。您可以使用mockito kotlin,这样您就不会出现此类错误
     override fun getEventsList(context: Context) {
        homeView.showProgress()
        homeInteractor.getEvents(context, this)
    }
    
    @Test
    fun startEventTest() {
        val testEvents = Event(
            "1",
            "Test",
            "Next week we have the vacation planing in Vizag",
            "This is for test",
            "1",
            "01-10-2019",
            "26-09-2019",
            "8.00",
            "10.47",
            "",
            true
        )
        val events: ArrayList<Event> = ArrayList<Event>()
        events.add(testEvents)
        eventPresenter.getEventsList(homeActivity)
        verify(eventView).showProgress()
        verify(eventInteractorImpl).getEvents(any(), any())
    }