2010-09-17 16 views
9

Tôi tìm thấy điều này example nơi họ đã sử dụng PowerMock và EasyMock để mở/thử các lớp Menu và MenuItem cho android. Tôi đã cố gắng làm một cái gì đó tương tự với PowerMock và Mockito với lớp Activity.Cố gắng để khai thác lớp Hoạt động android bằng PowerMockito ném RuntimeException "Stub!"

Tôi hiểu rằng rất nhiều phương pháp là cuối cùng và trong Android.jar, tất cả chúng đều chỉ ném RuntimeException ("Stub!").

Tôi cũng hiểu rằng bài kiểm tra này chưa hoàn thành nhưng tôi chỉ muốn xem liệu có thể giả lập lớp Hoạt động trên Android hay không.

Nhưng với điều đó PowerMock cho phép bạn giả lập các lớp học với các phương thức cuối cùng thì mã này có hoạt động không?

@RunWith(PowerMockRunner.class) 
@PrepareForTest(Activity.class) 
public class MyTestCase extends TestCase { 

    public void testPlease_JustWork() throws Exception { 
     Activity mockActivity = PowerMockito.mock(Activity.class); 

     PowerMockito.when(mockActivity.getTitle()).thenReturn("Title"); 
    } 
} 

Tôi nghĩ rằng RuntimeException sẽ không còn xảy ra và "Tiêu đề" sẽ được trả lại nhưng nó vẫn ném ngoại lệ.

Tôi đã thử tất cả các loại vật khác nhau như doReturn("Title").when(mockActivity).getTitle();suppress(constructor(Activity.class));

Am tôi làm điều gì đó sai hoặc là này chỉ là không thể?

Trả lời

0

Tôi vừa thử mẫu mã của bạn và nó hoạt động ở đây, lạ. Tôi đã tải về PowerMock 1.4.5 với Mockito và JUnit bao gồm cả các phụ thuộc và sử dụng android.jar từ sdk (2.2). Nó chỉ thất bại với ngoại lệ nếu tôi xóa @PrepareForTest.

EDIT

Bạn có thể sử dụng android.jar với mã ngoại lệ loại bỏ, được cung cấp trong bài viết bạn tham chiếu.

+0

Tôi sẽ thử lại ... – bytebender

+0

Không có súc sắc, bạn có thể cho tôi biết dòng nhập của bạn trông như thế nào không? – bytebender

+0

tôi đã tải lên toàn bộ dự án nhật thực tới http://maik.0x2a.at/PowerMockTests.zip. Bạn có thể cần phải thích ứng với đường dẫn đến android.jar – crazymaik

5

Có lẽ không phải là câu trả lời trực tiếp cho câu hỏi của bạn, nhưng bạn có thể thử Robolectric để kiểm tra các phần của ứng dụng Android trên PC của bạn.

Roboelectric tránh Stub! ngoại lệ và cung cấp cho bạn một số tối thiểu Triển khai lớp học Android

2

Tôi nghĩ câu trả lời là thư viện tham chiếu của bạn quan trọng vì android.jar bao gồm một số sơ yếu cho junit.

Bạn phải đảm bảo rằng trên dự án thử nghiệm của mình, nếu bạn đi đến 'thuộc tính' và sau đó 'Đường dẫn xây dựng Java' mà bình junit kết hợp với phiên bản đầy đủ của powermock bạn tải xuống hiển thị trên 'Đặt hàng và xuất' tab phía trên android.jar. Nếu không, hệ thống sẽ giải quyết các gói junit.framework và junit.runner từ android.jar trước khi nó giải quyết chúng từ junit.jar có trong powermock.

Tôi nhận ra câu hỏi này là cũ, nhưng tôi nghĩ đây là câu trả lời đúng vì vậy tôi muốn đảm bảo ghi lại câu hỏi đó trên câu hỏi.

Các vấn đề liên quan