que tienen esta clase de prueba para probar un servicio remoto:servicio de Android no lanzada por prueba unitaria
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);
}
}
El problema es que StartService (servicio) en el método setup() no se inicia el servicio correctamente. Esto es lo que muestra la AVD:
Como se puede ver, se puso en marcha el proceso, pero el servicio no es. Luego, el testBindService()
, assertTrue(isBound)
falla.
Esto no sucede si pongo en marcha el servicio de una actividad:
@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();
}
Aquí el servicio se inicia correctamente, como se muestra a continuación.
¿Cómo puedo iniciar y se unen a un servicio remoto que usa Messenger para comunicarse con las actividades de un proyecto de prueba de Android?
Haga primero estos controles para que podamos asegurarnos de que es un problema central y no algo sintáctico primero Asegúrese su manifiesto tiene este ' ' y está anidado entre la etiqueta de la aplicación como ' application> ' También asegúrese de que todas las dependencias del proyecto estén correlacionadas correctamente. Compruebe también si su coreservice.java está en el mismo paquete o un paquete diferente como actividad: asegúrese de tener los nombres de los paquetes en el manifiesto. –
Slartibartfast
Como dije: * "Esto no ocurre si lanzo el servicio desde una Actividad" *, así que obviamente el Manifiesto es correcto. Además, como puede ver, no aparece el error "No se encontró el servicio", pero el proceso se inicia pero no hay servicio. Esto es lo que encuentro extraño. – m0skit0