2014-11-04 18 views
6

Tôi đang cố gắng thử nghiệm ứng dụng Bluetooth nhưng bước đầu tiên tạo một đối tượng giả của lớp BluetoothAdapter không hoạt động !!Android BluetoothAdapter Mocking

Tôi đang sử dụng powermockito với mô hình dễ dàng.

mBluetoothAdapter = (BluetoothAdapter)PowerMock.createMock(BluetoothAdapter.class); 

điều này không thành công. với dấu vết ngăn xếp sau đây

java.lang.IllegalArgumentException: No visible constructors in class android.bluetooth.BluetoothAdapter 
at org.easymock.internal.DefaultClassInstantiator.getConstructorToUse(DefaultClassInstantiator.java:94) 
at org.easymock.internal.AndroidClassProxyFactory.createProxy(AndroidClassProxyFactory.java:48) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:114) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:88) 
at org.easymock.internal.MocksControl.createMock(MocksControl.java:79) 
at org.powermock.api.easymock.PowerMock.doCreateMock(PowerMock.java:2212) 
at org.powermock.api.easymock.PowerMock.doMock(PowerMock.java:2163) 
at org.powermock.api.easymock.PowerMock.createMock(PowerMock.java:89) 
at com.xxx.blesimplesample.test.MainActivityTest.setUp(MainActivityTest.java:59) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:191) 
at android.test.AndroidTestRunner.runTest(AndroidTestRunner.java:176) 
at android.test.InstrumentationTestRunner.onStart(InstrumentationTestRunner.java:554) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1710) 

Bất kỳ ai đã sử dụng bất kỳ khuôn khổ mocking nào cho ứng dụng Bluetooth chế nhạo? Bất kỳ đề xuất nào cũng sẽ hữu ích

Trả lời

1

BluetoothAdapter trong khung Android được tuyên bố final, vì vậy tại thời điểm bạn đặt câu hỏi này, nó không thể bị nhạo báng, cả Mockito lẫn Robolectric.

Tuy nhiên, thử nghiệm đơn vị Android đã thay đổi rất nhiều kể từ đó. Với các phiên bản gần đây của các công cụ, khi bạn xây dựng các bài kiểm tra đơn vị, các công cụ sẽ tạo ra một bản vá android.jar với tất cả các loại bỏ final. Điều này làm cho tất cả các lớp Android có sẵn để chế nhạo. Ngày nay, nếu bạn muốn thử bất kỳ mã Bluetooth nào, bạn có thể làm như vậy theo cách tiêu chuẩn. Mã bạn đã thử sẽ "chỉ hoạt động" nếu bạn cập nhật các công cụ mới nhất. Ngoài ra, Robolectric có sẵn một lớp học ShadowBluetoothAdapter.