DEV Community

LiHan
LiHan

Posted on • Edited on

[Android] UserListApp - UnitTest -Part6

Add Test Dependency

okhttp3.4.9 is match mockwebserver4.9.3

    //Mock Server
    testImplementation 'com.squareup.okhttp3:mockwebserver:4.9.3'
    //okhttp
    implementation 'com.squareup.okhttp3:okhttp:3.4.9'
    //Truth
    testImplementation "com.google.truth:truth:1.1"
    testImplementation 'junit:junit:4.13.2'
Enter fullscreen mode Exit fullscreen mode

Create TestFile

CreateTestFile

CreateTestFile2

UserRepositoryTest

This test is test for api send , success and fail

class UserRepositoryImplTest {

    private lateinit var userRepository: UserRepository
    private lateinit var mockWebServer : MockWebServer

    @Before
    fun setUp() {
        mockWebServer = MockWebServer()
        val retrofit = Retrofit.Builder()
            .baseUrl(mockWebServer.url(""))
            .addConverterFactory(GsonConverterFactory.create())
            .build()
        val userApi = retrofit.create(UserApi::class.java)
        userRepository = UserRepositoryImpl(userApi)
    }

    @After
    fun tearDown() {
        mockWebServer.shutdown()
    }

    @Test
    fun `getRandomUserWhenSuccess`() = runBlocking{
        mockWebServer.enqueue(
            MockResponse()
                .setResponseCode(200)
                .setBody(UserDumpData.result)
        )

        var user : User?=null
        var errorMessage = ""
        userRepository.getRandomUser().collectLatest {
            user = it.data
            errorMessage = it.message?:""
        }
        assertTrue(user !=  null)
        assertTrue(errorMessage.isEmpty())
    }
    @Test
    fun `getRandomUserWhenFailed`() = runBlocking{
        mockWebServer.enqueue(
            MockResponse()
                .setResponseCode(404)
                .setBody("{}")
        )

        var user : User?=null
        var errorMessage = ""
        userRepository.getRandomUser().collectLatest {
            user = it.data
            errorMessage = it.message?:""
        }
        assertTrue(user ==  null)
        assertTrue(errorMessage.isNotEmpty())
    }
}
Enter fullscreen mode Exit fullscreen mode

Image of Timescale

🚀 pgai Vectorizer: SQLAlchemy and LiteLLM Make Vector Search Simple

We built pgai Vectorizer to simplify embedding management for AI applications—without needing a separate database or complex infrastructure. Since launch, developers have created over 3,000 vectorizers on Timescale Cloud, with many more self-hosted.

Read full post →

Top comments (0)

Image of Timescale

Timescale – the developer's data platform for modern apps, built on PostgreSQL

Timescale Cloud is PostgreSQL optimized for speed, scale, and performance. Over 3 million IoT, AI, crypto, and dev tool apps are powered by Timescale. Try it free today! No credit card required.

Try free

AWS GenAI Live!

GenAI LIVE! is a dynamic live-streamed show exploring how AWS and our partners are helping organizations unlock real value with generative AI.

Tune in to the full event

DEV is partnering to bring live events to the community. Join us or dismiss this billboard if you're not interested. ❤️