web-dev-qa-db-ja.com

メソッドをテストする方法は、Mockitoでブール値を返します

Android studioでユニットテストを行う方法を学んでいます。以下に示すように、「isValidUrl」というメソッドがあり、以下のテストセクションで、Mockitoを使用してそのメソッドのテストをコーディングしました。しかし、テストは常に失敗します。

この方法をテストする方法を教えてくれませんか?

コード

public boolean isValidUrl(String url) {
    return (url != null && !url.equals("")) ? true : false;
}

テスト

public class ValidationTest {
@Mock
private Context mCtx = null;

@Before
public void setUp() throws Exception {
    mCtx = Mockito.mock(Context.class);
    Assert.assertNotNull("Context is not null", mCtx);
}

@Test
public void isValidUrl() throws Exception {
    Validation validation = new Validation(mCtx);
    String url = null;
    Mockito.when(validation.isValidUrl(url)).thenReturn(false);
}

}

5
user2121

'実際の'オブジェクト(validation)の動作をモックしようとしているため、例外が発生します。

モックアサートの2つを分離する必要があります。

モックは、クラスの「偽の」オブジェクトを作成し(Contextで行ったように)、テストの前にそれらの動作を定義することを意味します。あなたの場合

_ Mockito.when(validation.isValidUrl(url)).thenReturn(false);
_

つまり、isValidUrl(url)が呼び出された場合にfalseを返すようにvalidationオブジェクトに指示します。ただし、これはモックオブジェクトでのみ実行できます。モックオブジェクトの動作ではなく、Validationクラスの「実際の」動作をテストする必要があるため、とにかくそれを実行しても意味がありません。モックメソッドは通常、クラスの依存関係の動作を定義するために使用されます。この場合も、Contextです。ここでのテストでは、これは必要ありません。

Assertingは、テスト対象のクラスがどのように動作するかについての実際の「テスト」を実行します。

urlであるnullに対してisValid()がfalseを返すことをテストする必要があります。

_Assert.assertEquals(validation.isValid(null), false); 
_

以下:

_Assert.assertFalse(validation.isValid(null)); 
_

assertEqualsassertFalseassertTrueおよび その他 を使用して、isValid()メソッドが必要なものを返すことを確認できます。指定されたurlパラメータを返します。

5
asco