2017-05-03 99 views
0

我想問一下關於具有BluetoothDevice變量的類的單元測試。安卓單元測試:模擬BluetoothDevice並寫入包裹

我的對象是一個簡單的對象,它包含一些原始變量和一個BluetoothDevice變量。我的對象也是可以parcelable的。

最終,我的代碼在移動設備上完全正常工作,但運行我的單元測試時出現奇怪的錯誤。

我嘲笑BluetoothDevice類在測試類,如下所示:

@RunWith(RobolectricTestRunner.class) 
@Config(manifest=Config.NONE) 
public class BluetoothDeviceTest { 

    @Mock 
    BluetoothDevice device1; 

    @Before 
    public void initMocks(){ 
     MockitoAnnotations.initMocks(this); 

     when(device1.getAddress()).thenReturn("01:02:03:04:05:06"); 
     when(device1.getName()).thenReturn("device767b1"); 
     when(device1.getBondState()).thenReturn(BOND_NONE); 
    } 
} 

以我對象其他原語中使用:

  • 我使用out.writeParcelable(mBluetoothDevice,0);內部@Override public void writeToParcel(Parcel out, int flags)方法。

  • 我使用mBluetoothDevice = in.readParcelable(BluetoothDevice.class.getClassLoader());裏面protected MyObject(Parcel in)構造函數。

,測試我的對象實例的瓜分單元測試失敗,異常 java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String

再次請注意,當我的代碼運行完全正常,並瓜分工作在移動應用程序,我的工作好

。只有單元測試是奇怪的。

我懷疑這是因爲我的模擬的BluetoothDevice變量在包裹中比正常實例中的要短,並且包裹中數據字段的順序變得混亂。

有沒有人測試過一個嘲諷BluetoothDevice,可以給我一些提示?謝謝

回答

0

爲了連接到BLE設備,應用程序需要獲取BluetoothDevice對象。這可以使用的 三種方法之一來進行:

  • 通過掃描:在回調 參數ScanResult返回一個對象BluetoothDevice類爲每個掃描通告數據包。

  • 通過使用BluetoothAdapter#getBondedDevices()獲取綁定設備的列表。

  • 通過使用BluetoothAdapter#getRemoteDevice(String address)創建設備對象。

當使用後一種方法獲得的BluetoothDevice類對象(或通過產生具有一個新的對象新 BluetoothDevice類(地址)),嘗試連接到它的工作僅當:

  • 的設備具有公共地址或粘結,或
  • 該設備已自藍牙適配器已啓動之前嘗試連接 掃描至少一次

來源:https://devzone.nordicsemi.com/blogs/1046/what-to-keep-in-mind-when-developing-your-ble-andr/