Android单元测试位置未嘲笑

时间:2019-05-28 14:01:01

标签: android unit-testing kotlin mockito location

我正在尝试测试演示者,但是我需要一个模拟的位置,但是,我会得到null或默认值,例如lat,long,bearing等的默认值为0.0

我已经尝试创建一个新的Location对象并初始化我需要的所有字段。

    val latitude = 37.422
    val longitude = -122.084

    val mockLocation = mock(Location::class.java)
    mockLocation.latitude = latitude
    mockLocation.longitude = longitude

    presenter.loadsAirpots(latitude, longitude)
    presenter.locationChanged(mockLocation)

    System.out.println(mockLocation.latitude)

我希望纬度为37.422,但实际输出为0.0

1 个答案:

答案 0 :(得分:1)

模拟对象时,不会调用真正的实现。 您正在尝试调用setLatitude(latitude),但不会更改该值。

如果要模拟对象,则应该执行以下操作:

val mockLocation = mock(Location::class.java)
given(mockLocation.getLatitude()).willReturn(latitude)
given(mockLocation.getLongitude()).willReturn(longitude)

或者您可以创建一个真实的对象:

val realLocation = Location("provider")
realLocation.latitude = latitude
realLocation.longitude = longitude