2017-09-28 7 views
-1

J'ai un fichier kotlin avec la fonction de niveau supérieur (ne fait partie d'aucune classe). Il compile en classe avec une fonction statique en Java. Je souhaite une implémentation différente de cette fonction pour les tests unitaires (indépendants de la plate-forme) et les tests d'instrumentation (comportement de production + Espresso Idling Resource). Je peux mettre le même fichier sur le même chemin pour prod et tests, mais quand je le mets à tester et androidTest - IDE le voir comme dans un ensemble de sources et ne peut pas résoudre quelle fonction je voudrais utiliser. Puisque j'utilise des fonctions de niveau supérieur, je ne peux pas utiliser DI pour passer une implémentation différente à la classe testée.Comment obtenir une implémentation différente de la fonction de niveau supérieur dans Unit et instrumentationTests pour Android

Y avait-il une implémentation différente de la classe pour test et androidTest pour les fonctions de niveau supérieur?

J'ai essayé

sourceSets { 
androidTest { 
    java.srcDirs = ['src/androidTest/java'] 
    java.exclude('src/test/java/util/CoroutinesUi.kt') 
} 
test { 
    java.srcDirs = ['src/test/java'] 
} 
} 

Avec pas de chance.

Répondre

0

Je résous ce problème pour l'instant en créant un délégué d'objet, qui obtient l'implémentation, et ma fonction de haut niveau appelle simplement l'implémentation actuellement disponible de ce délégué. Dans ce cas, je dois juste réinitialiser les implémentations dans @Before dans le test de base, mais obtenir quelques appels virtuels, ce qui est OK.