mam tej klasy do testów usługi zdalnej:Android usługa uruchomiona przez nie testów JUnit
public class CoreServiceBasicTest extends ServiceTestCase<CoreService> implements ServiceConnection {
/** Tag for logging */
private final static String TAG = CoreServiceBasicTest.class.getName();
/** Receive incoming messages */
private final Messenger inMessenger = new Messenger(new IncomingHandler());
/** Communicate with the service */
private Messenger outMessenger = null;
/** Handler of incoming messages from service */
private static class IncomingHandler extends Handler {
@Override
public void handleMessage(Message msg) {
Log.d(TAG, "Incoming message");
}
}
/** Constructor for service test */
public CoreServiceBasicTest() {
super(CoreService.class);
}
/** Start the service */
@Override
public void setUp() {
// Mandatory
try {
super.setUp();
} catch (Exception e) {
e.printStackTrace();
}
// Start the service
Intent service = new Intent();
service.setClass(this.getContext(), CoreService.class);
startService(service);
Log.d(TAG, "Service started");
}
public void onServiceConnected(ComponentName className, IBinder service) {
outMessenger = new Messenger(service);
Log.d(TAG, "Service attached");
}
public void onServiceDisconnected(ComponentName className) {
// TODO Auto-generated method stub
}
@SmallTest
public void testBindService() {
// Bind to the service
Intent service = new Intent();
service.setClass(getContext(), CoreService.class);
boolean isBound = getContext().bindService(service, this, Context.BIND_AUTO_CREATE);
assertTrue(isBound);
}
}
Problem polega na tym, że StartService (usługi) w metodzie setup() nie poprawnie uruchomić usługę. To co pokazuje AVD:
Jak widać, proces jest uruchomiony, ale obsługa nie jest. Następnie na testBindService()
, assertTrue(isBound)
kończy się niepowodzeniem.
nie stanie, jeśli uruchomić usługę z działalności:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// Start the Core service
Intent service = new Intent();
service.setClass(this, CoreService.class);
if (startService(service) == null) {
Toast.makeText(this, "Error starting service!", Toast.LENGTH_LONG).show();
Log.e(TAG, "Error starting service");
} else {
Toast.makeText(this, "Service started sucessfully", Toast.LENGTH_LONG).show();
}
// Die
finish();
}
Tutaj usługa jest uruchomiona poprawnie, tak jak pokazano poniżej.
Jak mogę zacząć i wiążą się ze zdalną obsługę, która używa Messenger komunikowania się z działalności z projektem Android test?
Najpierw wykonaj te kontrole, aby upewnić się, że jest to podstawowy problem, a nie coś, co jest składniowe po raz pierwszy Upewnij się, że twój manifest ma ten numer: ' i jest zagnieżdżony pomiędzy tagiem aplikacji, tak jak" application> ' Upewnij się również, że wszystkie zależności projektu są poprawnie odwzorowane Sprawdź również, czy twój coreservice.java jest w tym samym pakiecie lub inny pakiet jako działanie - upewnij się, że nazwy pakietów są poprawne w manifeście. –
Slartibartfast
Jak już powiedziałem: * "Tak się nie stanie, jeśli uruchomię usługę z działania" *, więc oczywiste jest, że Manifest jest poprawny. Jak widać, nie ma błędu "Nie znaleziono usługi", ale proces jest uruchamiany, ale nie ma dołączonej usługi? To jest coś, co wydaje mi się dziwne. – m0skit0