Mam projekt Android Studio z dwoma modułami bibliotecznymi: foo-module
i bar-module
. Każda implementuje bibliotekę, z foo-module
definiującą interfejs strategii i w zależności od foo-module
i wdrażającą taką strategię. foo-module
ma testy oprzyrządowania (foo-module/src/androidTest/
) do przetestowania kodu podstawowego, za pomocą strategii strategii stub, a bar-module
powinien mieć własne testy oprzyrządowania.Jak dziedziczymy klasy testowe w modułach biblioteki Androida?
Zdefiniowałem klasę AbstractTests
w foo-module/src/androidTest/
, która wykonuje większość rzeczywistych testów. Mam również klasę StubTests
w foo-module/src/androidTest/
, która rozszerza AbstractTests
i implementuje niezbędne metody abstract
, aby zakończyć testowanie (zapewniając implementację strategii itp.). To wszystko działa świetnie.
W bar-module/src/androidTest/
, stworzyłem BarStrategyTests
klasy, zaprojektowany w celu odzwierciedlenia StubTests
, ale zapewniają strategii realizowanych w bar-module
. Jednak BarStrategyTests
nie może zobaczyć AbstractTests
, mimo że mam compile project(':foo-module')
w moim pliku build.gradle
, a główne (inne niż testowe) klasy w bar-module
mogą działać poprawnie z głównymi (beztestowymi) klasami w foo-module
. IOW, podczas gdy zależność project()
obsługuje zwykły kod, nie obsługuje kodu androidTest/
. Otrzymuję komunikat "error: package com.commonsware.foo.test nie istnieje".
Próbowałem również dodać androidTestCompile project(':foo-module')
, z tym samym wynikiem.
Jaki jest przepis na dzielenie się testowym kodem testowym między modułami?
Tymczasowo mogę sklonować AbstractTests
, ale to nie jest świetne długoterminowe rozwiązanie.
This SO question obejmuje podobne podłoże dla zwykłej Java. Czy ktoś próbował opcji w the one answer i dostał je do pracy na testy oprzyrządowania Androida? Pierwsza opcja (przeniesienie wspólnego kodu testowego do innego modułu jako zwykłego kodu niebędącego testem) wydaje się prawdopodobna, ale nie mam pojęcia, czy pozostałe dwa będą dobrze działać z wtyczką com.android.library
, zamiast z wtyczką java
.
czy znalazłeś sposób, aby to osiągnąć? Chcę udostępnić moje klasy testowe także dla innych modułów, ale mam trudności z udostępnieniem zasobów. – karate
@karate: Używam podejścia opisanego w zaakceptowanej odpowiedzi. – CommonsWare