如何对我的存储库和视图模型进行单元测试?

时间:2021-07-20 10:03:21

标签: android unit-testing kotlin mvvm mockito

我想对我的视图模型和存储库进行单元测试,但我不知道如何实现。我已经从 viewmodeltestclass 开始,但我不知道如何才能走得更远,最好的方法是什么。我还应该测试我的端点类和主要活动吗?有人可以帮我吗?

这是我的端点类:

interface VenuesEndpoint {

    @GET("v2/venues/search")
    suspend fun get(
        @Query("near") city: String,
        @Query("limit") limit: String = Constants.LIMIT,
        @Query("radius") radius: String = Constants.RADIUS,
        @Query("client_id") id: String = Constants.CLIENT_ID,
        @Query("client_secret") secret: String = Constants.CLIENT_SECRET,
        @Query("v") date: String
    ): VenuesMainResponse

}

我的存储库类:

 private val _data: MutableLiveData<VenuesMainResponse?> = MutableLiveData(null)
    val data: LiveData<VenuesMainResponse?> get() = _data

    suspend fun fetch(city: String, date: String) {

        val retrofit = ApiClient()
        val api = retrofit.retro.create(VenuesEndpoint::class.java)

        try {
            val response = api.get(
                city = city,
                date = date
            )
            _data.value = response
        } catch (e: Exception) {
            Log.d(TAG, e.message.toString())
            _data.value = null
        }
    }

}

我的视图模型类:

class VenueViewModel() : ViewModel() {

    private val repository = VenuesRepository()
    val data: LiveData<VenuesMainResponse?> = repository.data
    fun getData(city: String, date: String) {

        viewModelScope.launch {
            repository.fetch(city, date)
        }
    }

}

我的 mainActivity 类:

class MainActivity : AppCompatActivity() {

    private val viewModel by viewModels<VenueViewModel>()
    private lateinit var adapter: HomeAdapter
    private var searchData: List<Venue>? = null

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        val editText = findViewById<EditText>(R.id.main_search)

        viewModel.getData(
            city = Constants.CITY,
            date = Constants.DATE
        )

        viewModel.data
            .observe(this, Observer {

                it.let {
                    initAdapter()
                    rv_home.visibility = View.VISIBLE
                    if (it != null) {
                        adapter.setData(it.response.venues.sortedBy { myObject -> myObject.name })
                        searchData = it.response.venues.sortedBy { myObject -> myObject.name }
                    } else {
                        Toast.makeText(this, Constants.ERROR_MESSAGE_API, Toast.LENGTH_SHORT).show()
                    }
                }
            })
}

我的 ViewModelTest 类:

@RunWith(AndroidJUnit4::class)
class VenueViewModelTest : TestCase() {

    private lateinit var viewModel: VenueViewModel

    @Before
    public override fun setUp() {
        super.setUp()
        viewModel = VenueViewModel()
    }


    @Test
    fun testVenueViewModel()
    {
       
    }


}

0 个答案:

没有答案