Test-Driven Development in Android

Jan 24 2023 · Kotlin 1.6, Android 12, AS Bumblebee 2021.1.1

Part 2: Integration Tests

13. Master Integration Tests

Episode complete

Play next episode

Next
About this episode

Leave a rating/review

See forum comments
Cinema mode Mark complete Download course materials
Previous episode: 12. Create First Test Method Next episode: 14. Last Integration Test

Get immediate access to this and 4,000+ other videos and books.

Take your career further with a Kodeco Personal Plan. With unlimited access to over 40+ books and 4,000+ professional videos in a single subscription, it's simply the best investment you can make in your development career.

Learn more Already a subscriber? Sign in.

Transcript: 13. Master Integration Tests

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.