2015-10-02 15 views
6

Android 6.0および新しい権限モデルでは、特定のタスクを実行する前に権限が存在するかどうかを確認しています。Androidでのテストの許可を模擬する方法は?

これらのアクセス許可を利用可能なものとテスト目的では使用できないものに割り当てたいとします。私は文字列に応じてさまざまな権限をチェックする静的クラスがあります。

boolean result = ContextCompat.checkSelfPermission(context, name) == PackageManager.PERMISSION_GRANTED; 

MockitoまたはRoboelectricを使用して達成できますか?

+2

RobolectricはAPI 21と現在互換性があります。彼らは現在API 23で作業しています –

答えて

3

権限チェッカーを共同編集者クラスに移動すると、共同編集者をモックできます。私はAndroidの戻り値の種類に慣れていませんが、解決策は次のようになります:

class PermissionsChecker { 
    public String checkSelfPermission(context, name) { 
     return ContextCompat.checkSelfPermission(context, name); 
    } 
} 
class YourApp { 
    private PermissionsChecker permissionsChecker; //need to inject this via setter or constructor 
    public doSomething() { 
     boolean result = permissionsChecker.checkSelfPermission(context, name).equals(PackageManager.PERMISSION_GRANTED); 
    } 
} 
class YourAppTest { 
    PermissionsChecker permissionsChecker = mock(PermissionsChecker.class); 
    @InjectMocks YourApp app = new YourApp(); 
    @Test 
    public void hasPermissions() { 
     when(permissionsChecker.checkSelfPermission(...)).thenReturn("NOT GRANTED"); 
     app.something(); 
     //verify you get some error 
    } 
} 
関連する問題