首页 > 解决方案 > Android unit testing Location not mocked

问题描述

I am trying to test my presenter and I need a mocked location, however, I get null or have default values such as 0.0 for lat, long, bearing and so on

I have already tried creating a new Location object and initializing all the fields I need.

    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)

I expect latitude to be 37.422 but the actual output is 0.0

标签: androidunit-testingkotlinmockitolocation

解决方案


When you mock an object the real implementation won't be called. You are trying to call setLatitude(latitude) but it won't change the value.

If you want to mock the object you should do:

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

Or you could create a real object:

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

推荐阅读