首页 > 解决方案 > 然后在将 mockito 与 kotlin 一起使用时返回一个数据类

问题描述

我想通过在我的视图模型代码中使用 mockito 创建一个单元测试,但我不知道如何将 mockitothenReturn用于包含一些信息的单个数据类。有人可以帮我吗,拜托。

这是我创建的 viewModel 类代码:

open class DetailViewModel : ViewModel() {

    var dataCollection:SendDetail  = SendDetail("",0,"","","","")

    fun getData(data:SendDetail){
        dataCollection.title=data.title
        dataCollection.picture=data.picture
        dataCollection.category= "Category : " + data.category
        dataCollection.genre= "Genre : \n" + data.genre
        dataCollection.release= "Release : \n" + data.release
        dataCollection.description= "Description : \n" + data.description
    }
}

这是我上面代码的单元测试代码:

class DetailViewModelTest {

    private lateinit var viewModel: DetailViewModel
    private var sendDetail= SendDetail("",0,"","","","")
    private val sampleDetail:MovieData = MovieDataObject.listData[1]

    private var dummyDetail= SendDetail("Doctor Who",
        2131165337,
        "Category : " +"Tv Series",
        "Genre : \n" +"Action, Adventure, Drama, Fantasy, Sci-fi",
        "Release : \n" +"March 26, 2005",
        "Description : \n"+ "The Doctor is a Time Lord: a 900 year old alien with 2 hearts, part of a gifted civilization who mastered time travel. The Doctor saves planets for a living – more of a hobby actually, and the Doctor's very, very good at it.")

    @Before
    fun setUp() {
        MockitoAnnotations.initMocks(this)
        viewModel = DetailViewModel()
        sendDetail.title=sampleDetail.title
        sendDetail.picture=sampleDetail.picture
        sendDetail.category="Category : " +sampleDetail.category
        sendDetail.genre="Genre : \n" +sampleDetail.genre
        sendDetail.release="Release : \n" +sampleDetail.release
        sendDetail.description="Description : \n"+sampleDetail.description
    }

    @Test
    fun getData() {
        val movieEntities = viewModel.getData(sendDetail)
        assertNotNull(movieEntities)
        assertEquals(dummyDetail,sendDetail)
    }

    @Test
    fun testMockGetData() {
        Mockito.`when`(viewModel.getData(sendDetail)).thenReturn(dummyDetail)   // <--- this dummyDetail is the problem
        val movieEntities = viewModel.getData(sendDetail)
        verify(viewModel).getData(sendDetail)
        assertEquals(dummyDetail, movieEntities)
    }

}

这是错误消息:

Type mismatch: inferred type is SendDetail but Unit! was expected

标签: unit-testingkotlinmockito

解决方案


fun getData(data:SendDetail)的返回类型为 void。

只需在参数后面加上返回类型即可,例如:fun getData(data:SendDetail): String


推荐阅读