TestObserver to easily test LiveData and make assertions on them.

Overview

JCenter Update

  • LiveData Testing is currently published on JCenter - it will serve packages until February 1st, 2022. LiveData Testing packages will be migrated to Maven Central before that - see issue. Thanks for using LiveData Testing! :)

LiveData Testing

TestObserver to easily test LiveData and make assertions on them.

CircleCI Download License Android Arsenal

Read Medium Article for more info.

Explanatory Diagram

Usage

Having LiveData<Integer> of counter from 0 to 4:

Kotlin - see ExampleTest.kt

liveData.test()
  .awaitValue()
  .assertHasValue()
  .assertValue { it > 3 }
  .assertValue(4)
  .assertHistorySize(5)
  .assertNever { it > 4 }


// Assertion on structures with a lot of nesting
viewLiveData.map { it.items[0].header.title }
  .assertValue("Expected title")

Java - see ExampleTest.java

TestObserver.test(liveData)
  .awaitValue()
  .assertHasValue()
  .assertValue(value -> value > 3)
  .assertValue(4)
  .assertHistorySize(5)
  .assertNever(value -> value > 4);

Don't forget to use InstantTaskExecutorRule from androidx.arch.core:core-testing to make your LiveData test run properly.

Download

Kotlin users:
testImplementation 'com.jraska.livedata:testing-ktx:1.1.2'
Java users:
testImplementation 'com.jraska.livedata:testing:1.1.2'

Philosophy

This library is created in a belief that to effective and valuable test should be fast to write and model real code usage. As by Architecture components spec Activity should communicate with its ViewModel only through observing LiveData. TestObserver in this case simulates the Activity and by testing LiveData, we could test our whole logic except the View where the responsibility belongs to Activity. Key ideas:

  • Test pretends to be an Activity
  • No Android framework mocking or Robolectric - just standard fast JUnit tests
  • Fluent API inspired by RxJava TestObserver
  • Easy to write fast executing tests - possibly TDD
Comments
  • Migrate to Maven Central

    Migrate to Maven Central

    https://jfrog.com/blog/into-the-sunset-bintray-jcenter-gocenter-and-chartcenter/

    Edit: UPDATE 4/27/2021: We listened to the community and will keep JCenter as a read-only repository indefinitely. Our customers and the community can continue to rely on JCenter as a reliable mirror for Java packages.

    opened by jraska 8
  • Strict dependency on androidx 2.0.0

    Strict dependency on androidx 2.0.0

    I tried to upgrade to androidx stable version 2.1.0, but gradle complains that there's a strict dependency on 2.0.0.

    My feeling is that this is coming from your library, but I'm not 100% sure. Please close the ticket if you don't think that's the case.

    Thanks!

    opened by Maragues 4
  • Testing LiveData Transformations causes NPE

    Testing LiveData Transformations causes NPE

    Testing ViewModel which uses Transformations live data. Tested on both versions 1.1.1 and 1.1.2

    ViewModel has:

        val counterList: LiveData<List<CounterDto>> =
            Transformations.map(counterRepository.findCounters()) {
                it
            }
    

    Test:

        @Test
        fun `get counters live data, when result is empty, return empty` () {
            // given
            val expected = MediatorLiveData<List<CounterDto>>().init(emptyList())
            `when`(counterRepository.findCounters()).thenReturn(expected)
    
            // when
            viewModel.counterList.test() // **Cause NPE**
    
            // then
            verify(counterRepository, times(1)).findCounters()
        }
    

    Stack-trace:

    java.lang.NullPointerException
    	at androidx.lifecycle.MediatorLiveData$Source.plug(MediatorLiveData.java:141)
    	at androidx.lifecycle.MediatorLiveData.onActive(MediatorLiveData.java:118)
    	at androidx.lifecycle.LiveData$ObserverWrapper.activeStateChanged(LiveData.java:437)
    	at androidx.lifecycle.LiveData.observeForever(LiveData.java:232)
    	at com.jraska.livedata.TestObserver.test(TestObserver.java:302)
    	at com.jraska.livedata.TestObserverKt.test(TestObserver.kt:6)
    

    Under debug: изображение

    изображение

    opened by iRYO400 3
  • How to instantiate a viewmodel which extends AndroidViewModel class

    How to instantiate a viewmodel which extends AndroidViewModel class

    Hi,

    First of all, thanks for open sourcing this library.

    In my project, I've viewmodels which extend AndroidViewModel class, which means they want an instance of application as a constructor parameter. I use the application context in viewmodel for two purposes:

    • to get some an instance of my application class to further have access to my dagger applicationComponent field so that I can use field injection in my viewmodel. Something like this:

    MyApplication.getInstance(application).applicationComponent.inject(this)

    • to get a string resource (getApplication() as MyApplication).getString(R.string....

    Hope that's clear.

    I can't think of anyway to test this viewmodel without using Android instrumention/RoboElectric.

    Do you have any ideas in mind?

    opened by yashasvigirdhar 3
  • History only contains last value.

    History only contains last value.

    I have a live data that representes the screen state of my view. In onError im setting the screen state to be of error which will show a snackbar and imeadiatly after that I am setting the state to be empty so the user sees a default empty screen. _screenState is my LiveData.

    fun loadArticle(articleId: Int) {
            refreshSubject
                .doOnNext { _screenState.value = ScreenState.loading(true) }
                .switchMap { getNewsUseCase.getNewsArticleById(articleId) }
                .doOnNext { _screenState.value = ScreenState.loading(false) }
                .subscribeIccResult({ result -> _screenState.value = ScreenState.success(result)
                }, { error ->
                    _screenState.value = ScreenState.error(getErrorMessage(error))
                    _screenState.value = ScreenState.empty()
                })
        }
    

    When testing the onError branch like so ...

    @Test
        fun testLoadArticle_ErrorState() {
            whenever(getNewsUseCase.getNewsArticleById(anyInt()))
                .thenReturn(Observable.just(IccResult.Failure(IccError.Unknown(Exception()))))
    
            articleViewModel.loadArticle(1)
    
            articleViewModel.screenState
                .test()
                .awaitValue()
                .assertHasValue()
                .assertValueHistory(ScreenState.empty(), ScreenState.error(R.string.error_loading_failed_message))
    
            verify(getNewsUseCase).getNewsArticleById(anyInt())
    
        }
    

    The test throws an error

    Expected :2 [com.icccricket.liteapp.ScreenState$Empty@7d322cad, Error(errorMessage=2131886162)] 
    Actual   :1 [com.icccricket.liteapp.ScreenState$Empty@21be3395]
    

    Basically only showing the last value from my live data, any idea why?

    opened by ashley-figueira 3
  • cannot access test() from live data

    cannot access test() from live data

    I get an error saying that my test class cannot access the TestObserver.

    I have imported your library using testImplementation 'com.jraska.livedata:testing-ktx:0.6.0' and i am writing my unit tests that is in the Test folder, not the androidTest folder

    opened by jonneymendoza 3
  • Test results uploading on Circle CI not finding the file

    Test results uploading on Circle CI not finding the file

    Just incase you hadn't noticed. The step in CI to upload test results (to attach to the build results) is failing to find the test results files, so they are silently failing.

    opened by lordcodes 3
  • Bump kotlin_version from 1.5.31 to 1.6.0

    Bump kotlin_version from 1.5.31 to 1.6.0

    Bumps kotlin_version from 1.5.31 to 1.6.0. Updates kotlin-gradle-plugin from 1.5.31 to 1.6.0

    Release notes

    Sourced from kotlin-gradle-plugin's releases.

    Kotlin 1.6.0-RC2

    Learn how to install Kotlin 1.6.0-RC2 plugin and how to configure build with 1.6.0-RC2

    Changelog

    Compiler

    New Features

    • KT-43919 Support loading Java annotations on base classes and implementing interfaces' type arguments

    Performance Improvements

    • KT-45185 FIR2IR: get rid of IrBuiltIns usages

    Fixes

    • KT-49477 Has ran into recursion problem with two interdependant delegates
    • KT-49371 JVM / IR: "NoSuchMethodError" with multiple inheritance
    • KT-49294 Turning FlowCollector into 'fun interface' leads to AbstractMethodError
    • KT-18282 Companion object referencing it's own method during construction compiles successfully but fails at runtime with VerifyError
    • KT-25289 Prohibit access to class members in the super constructor call of its companion and nested object
    • KT-32753 Prohibit @​JvmField on property in primary constructor that overrides interface property
    • KT-43433 Suspend conversion is disabled message in cases where it is not supported and quickfix to update language version is suggested
    • KT-49209 Default upper bound for type variables should be non-null
    • KT-22562 Deprecate calls to "suspend" named functions with single dangling lambda argument
    • KT-49335 NPE in RepeatedAnnotationLowering.wrapAnnotationEntriesInContainer when using @Repeatable annotation from different file
    • KT-49322 Postpone promoting warnings to errors for ProperTypeInferenceConstraintsProcessing feature
    • KT-49285 Exception on nested builder inference calls
    • KT-49101 IllegalArgumentException: ClassicTypeSystemContext couldn't handle: Captured(out Number)
    • KT-36399 Gradually support TYPE_USE nullability annotations read from class-files
    • KT-11454 Load annotations on TYPE_USE/TYPE_PARAMETER positions from Java class-files
    • KT-18768 @Notnull annotation from Java does not work with varargs
    • KT-24392 Nullability of Java arrays is read incorrectly if @Nullable annotation has both targets TYPE_USE and VALUE_PARAMETER
    • KT-48157 FIR: incorrect resolve with built-in names in use
    • KT-46409 FIR: erroneous resolve to qualifier instead of extension
    • KT-44566 FirConflictsChecker do not check for conflicting overloads across multiple files
    • KT-37318 FIR: Discuss treating flexible bounded constraints in inference
    • KT-45989 FIR: wrong callable reference type inferred
    • KT-46058 [FIR] Remove state from some checkers
    • KT-45973 FIR: wrong projection type inferred
    • KT-43083 [FIR] False positive 'HIDDEN' on internal
    • KT-46727 Report warning on contravariant usages of star projected argument from Java
    • KT-40668 FIR: Ambiguity on qualifier when having multiple different same-named objects in near scopes
    • KT-37081 [FIR] errors NO_ELSE_IN_WHEN and INCOMPATIBLE_TYPES absence
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-45118 ClassCastException caused by parent and child class in if-else
    • KT-47605 Kotlin/Native: switch to LLD linker for MinGW targets
    • KT-44436 Support default not null annotations to enhance T into T!!
    • KT-49190 Increase stub versions

    ... (truncated)

    Changelog

    Sourced from kotlin-gradle-plugin's changelog.

    CHANGELOG

    Commits

    Updates kotlin-stdlib-jdk7 from 1.5.31 to 1.6.0

    Release notes

    Sourced from kotlin-stdlib-jdk7's releases.

    Kotlin 1.6.0-RC2

    Learn how to install Kotlin 1.6.0-RC2 plugin and how to configure build with 1.6.0-RC2

    Changelog

    Compiler

    New Features

    • KT-43919 Support loading Java annotations on base classes and implementing interfaces' type arguments

    Performance Improvements

    • KT-45185 FIR2IR: get rid of IrBuiltIns usages

    Fixes

    • KT-49477 Has ran into recursion problem with two interdependant delegates
    • KT-49371 JVM / IR: "NoSuchMethodError" with multiple inheritance
    • KT-49294 Turning FlowCollector into 'fun interface' leads to AbstractMethodError
    • KT-18282 Companion object referencing it's own method during construction compiles successfully but fails at runtime with VerifyError
    • KT-25289 Prohibit access to class members in the super constructor call of its companion and nested object
    • KT-32753 Prohibit @​JvmField on property in primary constructor that overrides interface property
    • KT-43433 Suspend conversion is disabled message in cases where it is not supported and quickfix to update language version is suggested
    • KT-49209 Default upper bound for type variables should be non-null
    • KT-22562 Deprecate calls to "suspend" named functions with single dangling lambda argument
    • KT-49335 NPE in RepeatedAnnotationLowering.wrapAnnotationEntriesInContainer when using @Repeatable annotation from different file
    • KT-49322 Postpone promoting warnings to errors for ProperTypeInferenceConstraintsProcessing feature
    • KT-49285 Exception on nested builder inference calls
    • KT-49101 IllegalArgumentException: ClassicTypeSystemContext couldn't handle: Captured(out Number)
    • KT-36399 Gradually support TYPE_USE nullability annotations read from class-files
    • KT-11454 Load annotations on TYPE_USE/TYPE_PARAMETER positions from Java class-files
    • KT-18768 @Notnull annotation from Java does not work with varargs
    • KT-24392 Nullability of Java arrays is read incorrectly if @Nullable annotation has both targets TYPE_USE and VALUE_PARAMETER
    • KT-48157 FIR: incorrect resolve with built-in names in use
    • KT-46409 FIR: erroneous resolve to qualifier instead of extension
    • KT-44566 FirConflictsChecker do not check for conflicting overloads across multiple files
    • KT-37318 FIR: Discuss treating flexible bounded constraints in inference
    • KT-45989 FIR: wrong callable reference type inferred
    • KT-46058 [FIR] Remove state from some checkers
    • KT-45973 FIR: wrong projection type inferred
    • KT-43083 [FIR] False positive 'HIDDEN' on internal
    • KT-46727 Report warning on contravariant usages of star projected argument from Java
    • KT-40668 FIR: Ambiguity on qualifier when having multiple different same-named objects in near scopes
    • KT-37081 [FIR] errors NO_ELSE_IN_WHEN and INCOMPATIBLE_TYPES absence
    • KT-48162 NON_VARARG_SPREAD isn't reported on *toTypedArray() call
    • KT-45118 ClassCastException caused by parent and child class in if-else
    • KT-47605 Kotlin/Native: switch to LLD linker for MinGW targets
    • KT-44436 Support default not null annotations to enhance T into T!!
    • KT-49190 Increase stub versions

    ... (truncated)

    Changelog

    Sourced from kotlin-stdlib-jdk7's changelog.

    CHANGELOG

    Commits

    Dependabot will resolve any conflicts with this PR as long as you don't alter it yourself. You can also trigger a rebase manually by commenting @dependabot rebase.


    Dependabot commands and options

    You can trigger Dependabot actions by commenting on this PR:

    • @dependabot rebase will rebase this PR
    • @dependabot recreate will recreate this PR, overwriting any edits that have been made to it
    • @dependabot merge will merge this PR after your CI passes on it
    • @dependabot squash and merge will squash and merge this PR after your CI passes on it
    • @dependabot cancel merge will cancel a previously requested merge and block automerging
    • @dependabot reopen will reopen this PR if it is closed
    • @dependabot close will close this PR and stop Dependabot recreating it. You can achieve the same result by closing it manually
    • @dependabot ignore this major version will close this PR and stop Dependabot creating any more for this major version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this minor version will close this PR and stop Dependabot creating any more for this minor version (unless you reopen the PR or upgrade to it yourself)
    • @dependabot ignore this dependency will close this PR and stop Dependabot creating any more for this dependency (unless you reopen the PR or upgrade to it yourself)
    dependencies 
    opened by dependabot[bot] 2
  • Consider matching function names/behaviour to RxJava TestObserver

    Consider matching function names/behaviour to RxJava TestObserver

    There are some differences in naming and behaviour between the two libraries, which has confused me a few times when using LiveData testing.

    There may be more than I mention below, but the ones that I notice each time:

    1. RxJava uses "assertValues", whereas LiveData Testing uses "assertValueHistory".
    2. RxJava TestObserver "assertValue" works like "assertValueHistory" with single element. It checks that only one value was received and it matched the argument. LiveData-Testing instead, assertValue just checks the last received value for equality.

    Maybe I am wrong in thinking that they should work the same way, as they are different libraries, just wondered what your thoughts on it were.

    opened by lordcodes 2
  • Add possibility to assert value as they come through onChanged

    Add possibility to assert value as they come through onChanged

    I am trying to test mutable data that is stored in a LiveData.

    But I couldn't find a proper way of asserting data fields as they come. In order to really assert the value as it comes, I had to use the map method in a way it probably wasn't designed to. It feels really awkward using it, even though it works.

    Example:

        @Test
        fun testMutableData() {
            val testSubject = subject.measurementEventData.test()
                    .map { measurementEvent ->
                        // This is the part that feels awkward
                        measurementEvent.isHandled shouldBe false
                        measurementEvent
                    }
            
            val measurement = Measurement(Sensor.TEMPERATURE, 0.55)
            
            subject.measurementEventData.value = Event(measurement)
    
            testSubject.value().isHandled = true
    
            testSubject
                    .assertValue { measurementEvent ->
                        measurementEvent.isHandled
                    }
        }
    

    I propose to add to the TestObserver a list of asserters and test them in every onChanged alongside the childObservers.

    opened by vitorhugods 2
  • Unable to import TestObserver class!

    Unable to import TestObserver class!

    Using AndroidX and added testImplementation 'com.jraska.livedata:testing:0.5.0' to gradle. However, I am unable to import the TestObserver or any classes from the library into my Test code.

    opened by ajmalsalim 2
  • Proposal : add assertValueHistory for list of predicates, not values

    Proposal : add assertValueHistory for list of predicates, not values

    Hi, Recently I experienced a problem - I wanted to check that my items in LiveData history are going in appropriate order. I didn't want to check that they are exactly the same, I only wanted to check the type of messages. The problem is that I could test this case either by using assertValueHistory(...) with EXACT values for history(which I didn't want to do), or by retrieving valueHistory() and asserting these values manually . The solution which I made is an extension function, which behaves the same as assertValueHistory but with predicates:

    fun <T> TestObserver<T>.assertValueHistory(vararg predicate: (item: T) -> Boolean) {
        val valueHistory = this.valueHistory()
        predicate.forEachIndexed { index, function ->
            assertTrue("assert history item #$index",function(valueHistory[index]))
        }
    }
    

    It can be used like that

    testObserver.assertValueHistory(
                    { it is Type1 },
                    { it is Type2 },
                    { it is Type3 }
                )
    

    I think it will be useful to add it to the library.

    Thank you

    opened by Kpeved 3
Releases(1.3.0)
  • 1.3.0(Nov 14, 2022)

    What's Changed

    • Maintenance update, no new features, only dependency bumps
    • Kotlin version is now 1.7.21
    • #142 Target Android 13

    Full Changelog: https://github.com/jraska/livedata-testing/compare/1.2.0...1.3.0

    Dependencies

    testImplementation 'com.jraska.livedata:testing-ktx:1.3.0'
    testImplementation 'com.jraska.livedata:testing:1.3.0'
    
    Source code(tar.gz)
    Source code(zip)
  • 1.2.0(May 25, 2021)

    • #78 Migration to Maven Central

    Kotlin:

    testImplementation 'com.jraska.livedata:testing-ktx:1.2.0'
    

    Java:

    testImplementation 'com.jraska.livedata:testing:1.2.0'
    Source code(tar.gz)
    Source code(zip)
  • 1.1.2(Mar 21, 2020)

    • #53: First release with automatic releasing
    • #52: Tooling update, Dependency on livedata:2.2.0 now

    Kotlin users:

    testImplementation 'com.jraska.livedata:testing-ktx:1.1.2'
    

    Java users:

    testImplementation 'com.jraska.livedata:testing:1.1.2'
    
    Source code(tar.gz)
    Source code(zip)
  • 1.1.1(Oct 27, 2019)

    Changes

    #46: Adding simple check for null value #48: Update used dependencies of Kotlin and Android Architecture components

    Kotlin users:

    testImplementation 'com.jraska.livedata:testing-ktx:1.1.1'
    

    Java users:

    testImplementation 'com.jraska.livedata:testing:1.1.1'
    
    Source code(tar.gz)
    Source code(zip)
  • 1.1.0(Mar 5, 2019)

    Changes

    #36: Adding Hook for on changed value #40: Adding assertion to all values received by TestObserver #41: Better error message for TestObserver.assertValue(predicate)

    Kotlin users:

    testImplementation 'com.jraska.livedata:testing-ktx:1.1.0'
    

    Java users:

    testImplementation 'com.jraska.livedata:testing:1.1.0'
    
    Source code(tar.gz)
    Source code(zip)
  • 1.0.0(Jan 12, 2019)

    API is now stable and will be maintained.

    #30: Improved docs #31: Remove deprecated dispose() method

    Kotlin users:

    testImplementation 'com.jraska.livedata:testing-ktx:1.0.0'
    

    Java users:

    testImplementation 'com.jraska.livedata:testing:1.0.0'
    
    Source code(tar.gz)
    Source code(zip)
  • 0.2.1(Jan 12, 2019)

  • 0.6.0(Dec 12, 2018)

    #27: Add map operator for complex data structures assertions.

    testImplementation 'com.jraska.livedata:testing:0.6.0'
    testImplementation 'com.jraska.livedata:testing-ktx:0.6.0' // If you are Kotlin positive
    
    Source code(tar.gz)
    Source code(zip)
  • 0.5.0(Nov 26, 2018)

    #23 : Adding TestLifecycle to test LiveData with lifecycle changes

    testImplementation 'com.jraska.livedata:testing:0.5.0'
    testImplementation 'com.jraska.livedata:testing-ktx:0.5.0' // If you are Kotlin positive
    
    Source code(tar.gz)
    Source code(zip)
  • 0.4.0(Nov 18, 2018)

    #19: Awaiting methods for multithreading

    testImplementation 'com.jraska.livedata:testing:0.4.0'
    testImplementation 'com.jraska.livedata:testing-ktx:0.4.0' // If you are Kotlin positive
    
    Source code(tar.gz)
    Source code(zip)
  • 0.3.0(Aug 26, 2018)

    Done #14: Using androidx namespace now

    testImplementation 'com.jraska.livedata:testing:0.3.0'
    testImplementation 'com.jraska.livedata:testing-ktx:0.3.0' // If you are Kotlin positive
    
    Source code(tar.gz)
    Source code(zip)
  • 0.2.0(Jul 22, 2018)

    Version 0.2.0

    • Initial release
    testImplementation 'com.jraska.livedata:testing:0.2.0'
    testImplementation 'com.jraska.livedata:testing-ktx:0.2.0' // If you are Kotlin positive
    
    Source code(tar.gz)
    Source code(zip)
Owner
Josef Raska
Android Engineer, technology fan, code lover and more.
Josef Raska
Kotlin wrapper for React Test Renderer, which can be used to unit test React components in a Kotlin/JS project.

Kotlin API for React Test Renderer Kotlin wrapper for React Test Renderer, which can be used to unit test React components in a Kotlin/JS project. How

Xavier Cho 7 Jun 8, 2022
Toster - Small test dsl based on adb commands that allows you to test the mobile application close to user actions

toster Small test dsl based on adb commands that allows you to test the mobile a

Alexander Kulikovskiy 31 Sep 1, 2022
Lbc-test-app - Test Android Senior Leboncoin

Test Android Senior Leboncoin ?? Mathieu EDET Overview Min API version : 24 This

null 0 Feb 7, 2022
Easily scale your Android Instrumentation Tests across Firebase Test Lab with Flank.

Easily scale your Android Instrumentation Tests across Firebase Test Lab with Flank.

Nelson Osacky 220 Nov 29, 2022
null 866 Dec 27, 2022
Barista makes developing UI test faster, easier and more predictable. Built on top of Espresso

Barista makes developing UI test faster, easier and more predictable. Built on top of Espresso, it provides a simple and discoverable API, removing most of the boilerplate and verbosity of common Espresso tasks. You and your Android team will write tests with no effort.

Adevinta Spain 1.6k Jan 5, 2023
PowerMock is a Java framework that allows you to unit test code normally regarded as untestable.

Writing unit tests can be hard and sometimes good design has to be sacrificed for the sole purpose of testability. Often testability corresponds to go

PowerMock 3.9k Jan 5, 2023
A powerful test framework for Android

Cafe A powerful test framework for Android named Case Automated Framework for Everyone. Home Page http://baiduqa.github.com/Cafe/ How to make Cafe dow

Baidu 367 Nov 22, 2022
A custom instrumentation test runner for Android that generates XML reports for integration with other tools.

Android JUnit Report Test Runner Introduction The Android JUnit report test runner is a custom instrumentation test runner for Android that creates XM

Jason Sankey 148 Nov 25, 2022
A powerful test framework for Android

Cafe A powerful test framework for Android named Case Automated Framework for Everyone. Home Page http://baiduqa.github.com/Cafe/ How to make Cafe dow

Baidu 367 Nov 22, 2022
PowerMock is a Java framework that allows you to unit test code normally regarded as untestable.

Writing unit tests can be hard and sometimes good design has to be sacrificed for the sole purpose of testability. Often testability corresponds to go

PowerMock 3.9k Jan 2, 2023
Linkester is an Android library that aims to help Android developers test their deep links implementation.

Linkester Linkester is an Android library that aims to help Android developers test their deep links implementation. The idea is to have a new launche

Ahmad Melegy 79 Dec 9, 2022
Strikt is an assertion library for Kotlin intended for use with a test runner such as JUnit, Minutest, Spek, or KotlinTest.

Strikt is an assertion library for Kotlin intended for use with a test runner such as JUnit, Minutest, Spek, or KotlinTest.

Rob Fletcher 447 Dec 26, 2022
The coding challenge elbotola android test

Introduction The coding challenge(s) below will be used to assess your familiarity with the Android development environment, relevant Android related

Mohamed Elouamghari 1 Nov 2, 2021
Android background tint test project

Android Background Tint References https://developer.android.com/reference/android/view/View#attr_android:background https://developer.android.com/ref

Ashwin Dinesh 0 Nov 4, 2021
Test for openbank application

openbank-test Test for openbank application Here you can find a simple test for the OpenBank application. It fetches some characters from the Marvel A

anon37894203 0 Nov 3, 2021
Proyecto de Kotlin y JPA sobre Hibernate, con algunos test usando JUnit 5 y Mockito.

Contactos Kotlin JPA Ejemplos de una aplicación de manejo de contactos con Kotlin y JPA. Usando para testear la aplicación JUnit 5 y Mockito. Almacena

José Luis González Sánchez 3 Sep 13, 2022
Slow-kotest - Demonstration that kotest is very slow during test instantiation

This project demostrates the slow start time for simple kotest unit tests. the c

null 1 Apr 6, 2022
Test Automation of Energy Australia - Web application

Test Automation of Energy Australia - Web application Technology used - Kotlin, Java, Espresso, Android Run the test on local environment git clone ht

null 0 Feb 9, 2022