İlk Android-TDD uygulamasını yazmaya çalışıyorum (TDD'siz birkaç küçük Android uygulaması yazdım, bu yüzden çevreye aşina oldum), ama başımı nasıl yazacağım konusunda kafamı çekemiyorum. Ölçek.Birim testi Activity.startService() çağrısı?
senaryo:
Ben bir etkinlik, TasksActivity ve bir hizmeti TasksService var. TasksActivity'nin TasksService'i onStart() yönteminde başladığını test etmem gerekiyor.
TasksActivity benim onCreate() yöntemindepublic class ServiceControlTest extends ActivityUnitTestCase<TasksActivity>{
public ServiceControlTest() {
super(TasksActivity.class);
}
public void testStartServiceOnInit() {
final AtomicBoolean serviceStarted = new AtomicBoolean(false);
setActivityContext(new MockContext() {
@Override
public ComponentName startService(Intent service) {
Log.v("mockcontext", "Start service: " + service.toUri(0));
if (service.getComponent().getClassName().equals (TasksService.class.getName()))
serviceStarted.set(true);
return service.getComponent();
}
});
startActivity(new Intent(), null, null);
assertTrue ("Service should have been started", serviceStarted.get());
}
}
Ben:
startService(new Intent(this, TasksService.class));
Ben de
getBaseContext().startService(new Intent(this, TasksService.class));
çalıştı Ama gelmiş
ben yazdım testi şudur Her iki durumda da MockContext'in startService yöntemimi çağırıyor. Bu yöntemin engellenmesi için bir yol var mı? Bu temel testleri gerçekleştirmek için temel Android API'lerini sarmalamaya gerek kalmayacaktım ...
Eğer senin 'Activity' en' onCreate() 'yöntemi enstrümantasyon yoluyla adlandırılan oluyor doğruladınız mı? Orada yaptığın şeyle ilgili yanlış bir şey göremiyorum. –
Şimdi, bu ilginç. Öyle değil. Açıkça getIstrumentation(). CallActivityOnCreate (...) yapsam da denmez. Ama ben * mock içeriğimi açıklarsam * diye adlandırılır * çağrının içinden geçmek için bir şeyler veya başka şeyler yapmak bağlamında bir bağımlılık olmalı. – Jules
Yup. Bunu bulduk (http://www.paulbutcher.com/2011/03/mock-objects-on-android-with-borachio-part-2/), bir göz atın. Esasen, MockContext 'neredeyse tamamen işe yaramaz :). –