Leave a rating/review
We are going to repeat the same test driven development for 3 more tests. This’ll all be very good practice for you. The first tests is going to make sure that saveNewItem saves the correct data, remember that this test only verified that we saved something.
The second one is going to verify that our getWishList method calls the database using our database access object. And the third test is going to make sure that the correct data is returned when calling the getWishlist method.
I know it sounds a littel bit tedious but remember that having good tests is always good for any kind of development not only android development.
Having said that this’ll be code that is be very familiar to you so I’ll go a littel bit faster thna usual. So lets create our first test.
@Test
fun saveNewItemSavesData() {
val wishlist = Wishlist("Victoria",
listOf("RW Android Apprentice Book", "Android phone"), 1)
val name = "Smart watch"
viewModel.saveNewItem(wishlist, name)
val mockObserver = mock<Observer<Wishlist>>()
wishlistDao.findById(wishlist.id)
.observeForever(mockObserver)
verify(mockObserver).onChanged(
wishlist.copy(wishes = wishlist.wishes + name))
}
Execute your test to see it fail. As expected the test failed so we are gonna make it pass.
Open your saveNewItem method. in here instead of passing whatever we want we want to pass the correct data.
wishlist.copy(wishes = wishlist.wishes + name)
Here we are adding a new item do the wishlist adding this statement. Easy right? Go back to your test, execute your test and see it pass. Cool
But we need to make sure that all of our tests pass. Nice! 2 out of 2.
Our next tests is going to verify that the getWishlist method actually calls our database access object to retrieve the list of wishlist items, so:
@Test
fun getWishListCallsDatabase() {
viewModel.getWishlist(1)
verify(wishlistDao).findById(any())
}
Execute your test, see it fail
Now we want just enough code to make it pass. Here inside of getWishlist instead of returning an empty MutableLiveData object return a repository.getWishlist with any parameter. Execute all of your tests and they all pass. Amazing.