4
votes

Les tests unitaires fonctionnent correctement lors de l'exécution, mais pas lors du débogage dans Android Studio 4.1

J'ai mis à niveau le studio Android et j'ai ce comportement étrange

lorsque j'exécute mes tests unitaires, ils s'exécutent et se terminent correctement (j'ai introduit des erreurs pour m'assurer qu'il en était ainsi)

mais lorsque je mets un point d'arrêt et que j'utilise des tests de débogage en java, le jvm se bloque avec cette erreur:

"C:\Program Files\Android\Android Studio4\jre\bin\java.exe" - agentlib:jdwp=transport=dt_socket,address=127.0.0.1:64493,suspend=y,server=n -ea -javaagent:C:\Users\imavrelos\.gradle\caches\modules-2\files-2.1\org.jetbrains.kotlinx\kotlinx-coroutines-core-jvm\1.3.9\4be434f5e86c1998a273e7f19a7286440894f0b0\kotlinx-coroutines-core-jvm-1.3.9.jar -Didea.test.cyclic.buffer.size=1048576 -javaagent:C:\Users\imavrelos\AppData\Local\Google\AndroidStudio4.1\groovyHotSwap\gragent.jar -javaagent:C:\Users\imavrelos\AppData\Local\Google\AndroidStudio4.1\captureAgent\debugger-agent.jar -Dfile.encoding=UTF-8 -classpath "C:\Program Files\Android\Android Studio4\lib\idea_rt.jar" com.intellij.rt.execution.CommandLineWrapper C:\Users\imavrelos\AppData\Local\Temp\idea_classpath1657759720 com.intellij.rt.junit.JUnitStarter -ideVersion5 @w@C:\Users\imavrelos\AppData\Local\Temp\idea_working_dirs_junit.tmp @C:\Users\imavrelos\AppData\Local\Temp\idea_junit.tmp -socket64492
Connected to the target VM, address: '127.0.0.1:64493', transport: 'socket'
java.lang.NoClassDefFoundError: kotlin/collections/AbstractMutableMap
    at java.lang.ClassLoader.defineClass1(Native Method)
    at java.lang.ClassLoader.defineClass(ClassLoader.java:757)
    at java.security.SecureClassLoader.defineClass(SecureClassLoader.java:142)
    at java.net.URLClassLoader.defineClass(URLClassLoader.java:468)
    at java.net.URLClassLoader.access$100(URLClassLoader.java:74)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:369)
    at java.net.URLClassLoader$1.run(URLClassLoader.java:363)
    at java.security.AccessController.doPrivileged(Native Method)
    at java.net.URLClassLoader.findClass(URLClassLoader.java:362)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    at kotlinx.coroutines.debug.internal.DebugProbesImpl.<clinit>(DebugProbesImpl.kt:30)
    at kotlinx.coroutines.debug.AgentPremain.<clinit>(AgentPremain.kt:26)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at sun.instrument.InstrumentationImpl.loadClassAndStartAgent(InstrumentationImpl.java:386)
    at sun.instrument.InstrumentationImpl.loadClassAndCallPremain(InstrumentationImpl.java:401)
Caused by: java.lang.ClassNotFoundException: kotlin.collections.AbstractMutableMap
    at java.net.URLClassLoader.findClass(URLClassLoader.java:382)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:419)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:352)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:352)
    ... 20 more
FATAL ERROR in native method: processing of -javaagent failed
Disconnected from the target VM, address: '127.0.0.1:64493', transport: 'socket'

Process finished with exit code 1
Exception in thread "main" 

quelqu'un a-t-il cette erreur? des suggestions sur la façon de résoudre ce problème?


0 commentaires

3 Réponses :


3
votes

J'ai corrigé cette erreur en modifiant la configuration actuelle d'exécution / débogage et en désactivant l'option "Raccourcir la ligne de commande". Avant, il était défini sur "classpath file", ce qui semble signaler l'erreur ci-dessus dans certains cas.

entrez la description de l'image ici


4 commentaires

Dans mon cas, j'ai dû définir cette valeur sur JAR Manifest pour pouvoir déboguer mes tests unitaires


non ce n'était pas le problème, je me suis heurté à des erreurs de chemin de classe à plusieurs reprises (car j'utilise des noms vraiment descriptifs pour mes tests), donc j'utilise toujours un raccourcisseur, dans mon cas il semble s'être corrigé. . ???? J'ai fermé le projet pour la nuit, ouvert le lendemain et il a juste commencé à fonctionner, je suppose que j'aurais dû essayer de l'éteindre et de le rallumer


le problème est revenu, malheureusement, je ne peux pas en utiliser car j'ai tendance à écrire de longs noms de fonctions de test, mais le manifeste jar a fonctionné


Le réglage sur none désactivera un test unitaire avec une erreur: Command line is too long. Shorten command line for UnitTest.someTest.



5
votes

Je l'ai corrigé en modifiant la configuration actuelle d'exécution / débogage et en choisissant le manifeste JAR dans l'option de ligne de commande Raccourcir.


0 commentaires

0
votes

J'ai écrit un test unitaire pour une bibliothèque. Lors de l' exécution avec Ctrl + Shift + F10 habituel, il s'exécutait, mais lors d'une tentative de débogage du test, il ne fonctionnait pas avec l'erreur: 'Exception dans le thread "main" java.lang.NoClassDefFoundError: kotlin / collections / AbstractMutableMap'.

Ensuite, j'ai déplacé le test unitaire vers le test d' instrumentation .


0 commentaires