推出Android服务,我有这个测试类测试远程服务:不是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);
}
}
的问题是,startService(服务)在SETUP()方法不正确启动该服务。这就是AVD显示:
正如你所看到的,过程被启动,但服务没有。然后在testBindService()
,assertTrue(isBound)
失败。
,如果我从活动推出的服务不会出现这种情况:
@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();
}
这里的服务正确启动,如下图所示。
我怎么可以就结合使用斜挎带从Android测试项目活动通信的远程服务?
请先做这些检查,以便我们确定它的核心问题而不是语法上的第一个 确保您的清单有这个 '<服务机器人:启用=“真正的”机器人:名字= /“CoreService。‘>' 并应用标签之间的嵌套在像这样' <服务机器人:名字=’” /> application>' 还要确保所有的项目依赖关系映射正确 还要检查你的coreservice.java是否在同一个包中或作为活动的不同软件包 - 确保您在清单中拥有正确的软件包名称。 –
Slartibartfast
2012-07-09 09:40:21
正如我所说:*“这不会发生,如果我从一个活动启动服务”*,所以显然清单是正确的。同样如您所见,没有“服务未找到”错误,但该过程已启动,但没有附加服务?这是我觉得奇怪的。 – m0skit0 2012-07-09 10:39:55