如何对SafetyNetClient.attest()及其关联的OnSuccessListener和OnFailureListener进行单元测试

时间:2019-04-25 13:06:38

标签: android unit-testing kotlin safetynet

我正在遵循以下指南https://developer.android.com/training/safetynet/attestation在我的应用程序中使用SafetyNet,并且我有与该模式相似的代码(在提供的链接中):

SafetyNet.getClient(this).attest(nonce, API_KEY)
    .addOnSuccessListener(this) {
        // ...
    }
    .addOnFailureListener(this) { e ->
        // ...
    }
}

一切正常,按预期我会成功或失败。

我的问题:有没有一种方法可以对代码进行单元测试,而无需在真正的SafetyNetClient上调用attest()方法,而是在模拟环境下调用?我可以使用Mockito模拟SafetyNetClientSafetyNetApi.AttestationResponse,但是我不知道如何模拟成功或失败事件。

1 个答案:

答案 0 :(得分:0)

 @Mock private SafetyNetClient safetyNetClientMock;
 @Mock Context contextMock;
 @Mock Task SafetyNetApi.AttestationResponse task;

 @Before
  public void setUp() {
    when(SafetyNet.getClient(contextMock)).thenReturn(safetyNetClientMock);
    when(safetyNetClientMock.attest(any(byte[].class), anyString())).thenReturn(task);
    when(task.addOnSuccessListener(any())).thenReturn(task);
    when(task.addOnFailureListener(any())).thenReturn(task);
 }