2017-07-03 2 views
3

J'ai découvert que dans Kotlin il est possible d'avoir deux classes avec le même nom, dans le même paquet mais l'une d'entre elles dans le dossier androidTest, et lors des tests Espresso, ce sera celui utilisé. Ce n'est pas possible sous Java, et je me demande si c'est un comportement intentionnel ou s'il est dû à autre chose.Pourquoi Kotlin permet-il d'avoir deux classes avec le même nom et le même paquet dans différents dossiers (par exemple: main and androidTest)?

enter image description here

Dans l'image, AppCollaborator, en Kotlin existent dans androidTest et principale, AS ne se plaint pas, mais il ne JavaCollaborator au sujet.

Le fait est que ce comportement est très utile pour doubler certaines classes pendant le test (API, Etc.), mais je ne sais pas si je peux m'en fier.

+0

Quel est le problème avec la classe Java? Que dit l'erreur? – guenhter

+0

Dupliquer la classe trouvée dans le fichier '.../JavaCollaborator.java' –

Répondre

2

Ceci est pris en charge, car dans le dossier de sortie-construction, vous avez différents sous-dossiers par ex.

  • build/classes/java/main
  • build/classes/java/tests
  • build/Kotlin classes/main

Vos fichiers de classe sont stockés dans des dossiers cibles mais runtime ils ont le même nom complet en raison de l'égalité des paquets et des noms de classes.

Il ne s'agit pas d'un problème Kotlin. C'est un conflit de nom normal. Évitez d'utiliser le même nom pour Test et Implémentation. Habituellement le test a Test ajouté à son nom. Dans votre cas: JavaCollaboratorTest

+0

Bonjour Guenhter, Cela n'explique pas pourquoi cela peut être fait en kotlin et pas en Java. Je suis d'accord pour appeler différemment les classes de test (bien que je préfère le suffixe Should), mais je ne parle pas de classes de test. L'idée en profite pour faire des doubles. Par exemple, un référentiel qui renvoie des données locales au lieu d'appeler une API distante. –