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);
}
}
'実際の'オブジェクト(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));
_
assertEquals
、assertFalse
、assertTrue
および その他 を使用して、isValid()
メソッドが必要なものを返すことを確認できます。指定されたurl
パラメータを返します。