[JAVA] Verwendung von ArgumentMatchern wie Mockitos any () in Kotlin

Mockito bei Kotlinany()OderisA()Wenn Sie verwenden```java.lang.IllegalStateException: Mockito.any() must not be null


 Dieser Fehler tritt in Null-safe Kotlin nicht auf, da diese Methoden null zurückgeben (wenn es sich um einen primitiven Typ handelt, wird der Standardwert zurückgegeben, sodass dieser Fehler nicht auftritt).
 Wenn Sie das zu überprüfende Methodenargument auf Nullable setzen, wird das Problem natürlich gelöst, aber das möchten Sie nicht.

 Zum Beispiel möchte ich den folgenden Teil verspotten und das Argument überprüfen.

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

Da der tatsächliche Code und der Test zum Zeitpunkt der Überprüfung unterschiedliche Instanzen sind, möchte ich überprüfen, ob sie dieselbe Klasse sind. Also schreibe ich es so.

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

Dies führt zu einem Fehler.

Lösungen

Wenn Sie es wie folgt umwandeln: `nullReturn ()`, wird es funktionieren.

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))

Aus unbekannten Gründen kann Kotlin die Compiler-Nullprüfung umgehen, indem er null umwandelt, z. B. "null als Zeichenfolge". Da ich es in eine NotNull-Klasse umwandle, wird es tatsächlich als NotNull beurteilt, selbst wenn es null ist? (Zur Laufzeit wird es mit `` `TypeCastException``` gelöscht.) Aus irgendeinem Grund funktioniert das Casting in Generics auch zur Laufzeit.

Recommended Posts

Verwendung von ArgumentMatchern wie Mockitos any () in Kotlin
Wie man Lombok im Frühling benutzt
Verwendung von InjectorHolder in OpenAM
Wie verwende ich Klassen in Java?
So testen Sie die Java-Vorschaufunktion (z. B. Java 15 Record) mit IntelliJ
Mehrsprachige Unterstützung für Java Verwendung des Gebietsschemas
Verwendung des benannten Volumes in docker-compose.yml
Verwendung von MySQL im Rails-Tutorial
Verwendung von Umgebungsvariablen in RubyOnRails
Verstehe in 5 Minuten !! Wie man Docker benutzt
Verwendung von credentials.yml.enc aus Rails 5.2
Verwendung von ExpandableListView in Android Studio
Verwendung der in Kotlins Schnittstelle implementierten Funktion, die in Maven als Standardimplementierung von Java 8 eingeführt wurde
So rufen Sie Bibliotheken wie JQuery und JQuery UI in Liferay 7 / DXP auf
[Rails] Verwendung von Auswahlfeldern in Ransack
Verwendung von JQuery in Rails 6 js.erb
Wie schreibe ich Java String # getBytes in Kotlin?
[Rails] Verwendung von PostgreSQL in einer Vagrant-Umgebung
Verwendung von Map
Wie benutzt man rbenv?
Verwendung mit_option
Verwendung von fields_for
Verwendung von java.util.logging
Verwendung der Karte
Verwendung von collection_select
Wie benutzt man Twitter4J
Verwendung von MapStruct
Verwendung von TreeSet
Wie man Identität benutzt
Wie man Hash benutzt
Verwendung von Dozer.mapper
Wie benutzt man Gradle?
Verwendung von org.immutables
Verwendung von java.util.stream.Collector
Verwendung von VisualVM
Verwendung von Map
Ich möchte Combine auch in UIKit verwenden.
[Ruby] Verwendung der Standardausgabe bei der bedingten Verzweigung
Ich möchte die praktischen Funktionen von Clojure in Kotlin nutzen
Verwendung der Z3-Bibliothek in Scala mit Eclipse
Verstehen Sie, wie Sie den JSON-Decoder von Swift in 3 Minuten verwenden
Verwendung von CommandLineRunner im Spring Batch von Spring Boot
Verwendung der JDD-Bibliothek in Scala mit Eclipse
Verwendung des In-Memory-Job-Repositorys mit Spring Batch
Hinweise zur Verwendung regulärer Ausdrücke in Java
Verwendung der Ketten-API
[Java] Verwendung von Map
Verwendung der Warteschlange mit Priorität
Verwendung des mit Tensorflow 2.0 trainierten Modells mit Kotlin / Java
Verwendung von JSON-Daten in der WebSocket-Kommunikation (Java, JavaScript)
[Rails] Verwendung von Enum
Verwendung von Java Optional
Verwendung von Ruby return
[Rails] Verwendung von Enum