[JAVA] Comment utiliser ArgumentMatchers tels que Mockito's any () dans Kotlin

Mockito à Kotlinany()OuisA()Lorsque vous utilisez```java.lang.IllegalStateException: Mockito.any() must not be null


 Cette erreur ne se produit pas dans Null-safe Kotlin car ces méthodes renvoient null (s'il s'agit d'un type primitif, elle renvoie la valeur par défaut, donc cette erreur ne se produit pas).
 Bien sûr, définir l'argument de méthode à vérifier sur Nullable résoudra le problème, mais vous ne voulez pas faire cela.

 Par exemple, je veux me moquer de la partie suivante et vérifier l'argument.

```kotlin
transition.onNext(TransitionType.Success())

Étant donné que le code réel et le test sont des instances différentes au moment de la vérification, je souhaite vérifier s'il s'agit de la même classe. Alors je l'écris comme ça.

Mockito.doNothing().`when`(mockEventBus).onNext(Mockito.isA(TransitionType.Success::class.java))

Cela entraînera une erreur.

Solution

Si vous le lancez comme le suivant `` nullReturn () '', cela fonctionnera.

class TestUtils private constructor() {

    companion object {
        fun <T> isA(type: Class<T>): T {
            Mockito.isA<T>(type)
            return nullReturn()
        }

        fun <T> any(): T {
            Mockito.any<T>()
            return nullReturn()
        }

        private fun <T> nullReturn(): T = null as T
    }
}
Mockito.doNothing().`when`(mockEventBus).onNext(TestUtils.isA(TransitionType.Success::class.java))

Pour des raisons inconnues, Kotlin peut contourner la vérification de null du compilateur en convertissant null, tel que null as String. Étant donné que je l'ai converti en classe NotNull, est-il réellement jugé comme NotNull même s'il est nul? (Au moment de l'exécution, il sera supprimé avec `` `` TypeCastException.) Et pour une raison quelconque, la diffusion dans Generics fonctionne également au moment de l'exécution.

Recommended Posts

Comment utiliser ArgumentMatchers tels que Mockito's any () dans Kotlin
Comment utiliser Lombok au printemps
Comment utiliser InjectorHolder dans OpenAM
Comment utiliser les classes en Java?
Comment essayer la fonction de prévisualisation Java (telle que Java 15 Record) avec IntelliJ
Prise en charge multilingue de Java Comment utiliser les paramètres régionaux
Comment utiliser le volume nommé dans docker-compose.yml
Comment utiliser MySQL dans le didacticiel Rails
Comment utiliser les variables d'environnement dans RubyOnRails
Comprendre en 5 minutes !! Comment utiliser Docker
Comment utiliser credentials.yml.enc introduit à partir de Rails 5.2
Comment utiliser ExpandableListView dans Android Studio
Comment utiliser la fonction implémentée dans l'interface de Kotlin introduite dans Maven comme implémentation par défaut de Java 8
Comment appeler des bibliothèques telles que JQuery et JQuery UI dans Liferay 7 / DXP
[Rails] Comment utiliser les boîtes de sélection dans Ransack
Comment utiliser JQuery dans Rails 6 js.erb
Comment écrire Java String # getBytes dans Kotlin?
[Rails] Comment utiliser PostgreSQL dans l'environnement Vagrant
Comment utiliser Map
Comment utiliser rbenv
Comment utiliser with_option
Comment utiliser fields_for
Comment utiliser java.util.logging
Comment utiliser la carte
Comment utiliser collection_select
Comment utiliser Twitter4J
Comment utiliser MapStruct
Comment utiliser TreeSet
Comment utiliser l'identité
Comment utiliser le hachage
Comment utiliser Dozer.mapper
Comment utiliser Gradle
Comment utiliser org.immutables
Comment utiliser java.util.stream.Collector
Comment utiliser VisualVM
Comment utiliser Map
Je souhaite également utiliser Combine dans UIKit.
[Ruby] Comment utiliser la sortie standard dans le branchement conditionnel
Je souhaite utiliser les fonctions pratiques de Clojure dans Kotlin
Comment utiliser la bibliothèque Z3 dans Scala avec Eclipse
Comprendre comment utiliser le décodeur JSON de Swift en 3 minutes
Comment utiliser CommandLineRunner dans Spring Batch of Spring Boot
Comment utiliser la bibliothèque JDD dans Scala avec Eclipse
Comment utiliser le référentiel de jobs en mémoire avec Spring Batch
Remarques sur l'utilisation des expressions régulières en Java
Comment utiliser l'API Chain
[Java] Comment utiliser Map
Comment utiliser Queue avec priorité
Comment utiliser le modèle entraîné Tensorflow 2.0 avec Kotlin / Java
Comment utiliser les données JSON dans la communication WebSocket (Java, JavaScript)
[Rails] Comment utiliser enum
Comment utiliser java Facultatif
Comment utiliser le retour Ruby
[Rails] Comment utiliser enum