我想对我的视图模型和存储库进行单元测试,但我不知道如何实现。我已经从 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()
{
}
}