推出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