Cố gắng viết ứng dụng Android-by-TDD đầu tiên của tôi (tôi đã viết một vài ứng dụng Android nhỏ mà không có TDD, vì vậy quen thuộc với môi trường), nhưng dường như tôi không thể hiểu được cách viết đầu tiên kiểm tra.Kiểm tra đơn vị Activity.startService() gọi?
Kịch bản:
Tôi có một hoạt động, TasksActivity và một dịch vụ, TasksService. Tôi cần kiểm tra rằng TasksActivity khởi động TasksService trong phương thức onStart() của nó.
Các thử nghiệm tôi đã viết là:
public 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());
}
}
Trong phương pháp onCreate() của tôi trong TasksActivity tôi có:
startService(new Intent(this, TasksService.class));
Tôi cũng đã cố gắng
getBaseContext().startService(new Intent(this, TasksService.class));
Nhưng trong cả hai trường hợp, phương thức startService của MockContext đều không được gọi. Có cách nào tôi có thể thiết lập việc đánh chặn phương pháp này không? Tôi thực sự không phải bắt đầu gói các API Android cơ bản để thực hiện các kiểm tra cơ bản như vậy ...
Bạn đã xác minh rằng bạn 'Activity' của' onCreate() 'phương pháp được gọi là việc thông qua các thiết bị đo đạc? Tôi không thấy bất cứ điều gì nhất thiết phải sai với những gì bạn đang làm ở đó. –
Bây giờ, điều đó thật thú vị. Nó không phải là. Nó cũng không được gọi nếu tôi làm một cách rõ ràng getInstrumentation(). CallActivityOnCreate (...). Nhưng nó * được gọi là nếu tôi bình luận ra bối cảnh giả lập của tôi ... phải có một số phụ thuộc vào bối cảnh làm một cái gì đó hoặc khác để vượt qua cuộc gọi thông qua. – Jules
Yup. Tìm thấy điều này (http://www.paulbutcher.com/2011/03/mock-objects-on-android-with-borachio-part-2/), hãy xem. Về cơ bản, 'MockContext' gần như hoàn toàn vô dụng :). –