2014-11-04 145 views
6

我試圖模擬測試藍牙應用程序,但我的第一步創建BluetoothAdapter類的模擬對象不工作!Android BluetoothAdapter嘲笑

我用簡單的模擬powermockito。

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

這個失敗。與以下堆棧跟蹤

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) 

任何人都使用任何嘲笑藍牙應用程序嘲笑的框架?任何建議將有幫助

回答

1

BluetoothAdapter在Android框架中聲明爲final,所以當你問這個問題的時候,它不能被嘲笑,既不是Mockito也不是使用Robolectric。

但是,從那以後,Android單元測試發生了很大變化。使用最新版本的工具,當您構建單元測試時,工具會生成修補程序android.jar並刪除所有final。這使得所有Android類都可用於模擬。如今,如果你想嘲笑任何藍牙代碼,你可以用標準的方式來做到這一點。如果您更新到最新的工具,您已經嘗試過的代碼將「正常工作」。另外,Robolectric現在有一個ShadowBluetoothAdapter類。