テストをコードファーストで設計する
コードファーストのスタイルでテストを設計することができます。
- テストクラスを作成し、
@NoLoadRun
アノテーションを付与したテスト関数を作成します。 - テスト手順を仮実装します。
- テスト対象のアプリが提供されたら
@NoLoadRun
を削除し、テストを実装して完成させ、実行します。
CodeFirst1.kt
テストクラスを作成し、@NoLoadRun
を付与したテスト関数を作成します。
@Testrun("testConfig/android/calculator/testrun.properties")
class CodeFirst1 : UITest() {
@NoLoadRun
@Test
@DisplayName("Start calculator")
fun A0010() {
scenario {
}
}
@NoLoadRun
@Test
@DisplayName("Add")
fun A0020() {
scenario {
}
}
@NoLoadRun
@Test
@DisplayName("Divide by zero")
fun A0030() {
scenario {
}
}
}
Spec-Report
CodeFirst2.kt
テストの手順を仮実装します。
マクロ"[Calculator Main Screen]"はこの時点では実装する必要はありません。
画面ニックネームファイル"[Calculator Main Screen]"もこの時点では実装する必要はありません。
@Testrun("testConfig/android/calculator/testrun.properties")
class CodeFirst2 : UITest() {
@NoLoadRun
@Test
@DisplayName("Start calculator")
fun A0010() {
scenario {
case(1) {
condition {
it.macro("[Calculator Main Screen]")
}.expectation {
it.screenIs("[Calculator Main Screen]")
}
}
}
}
@NoLoadRun
@Test
@DisplayName("Add")
fun A0020() {
scenario {
case(1) {
condition {
it.macro("[Calculator Main Screen]")
}.action {
it.tap("[1]")
.tap("[+]")
.tap("[2]")
.tap("[=]")
}.expectation {
it.select("[result final]")
.textIs("3")
}
}
}
}
@NoLoadRun
@Test
@DisplayName("Divide by zero")
fun A0030() {
scenario {
case(1) {
condition {
it.macro("[Calculator Main Screen]")
}.action {
it.tap("[1]")
.tap("[÷]")
.tap("[0]")
.tap("[=]")
}.expectation {
it.select("[result preview]")
.textIs("Can't divide by 0")
}
}
}
}
}
この時点でテストを実行すると以下のようなSpec-Reportが出力されます。
Spec-Report
CodeFirst3.kt
テスト対象のアプリが提供されたら@NoLoadRun
アノテーションを削除し、テストを実装して完成させ、実行します。
@Testrun("testConfig/android/calculator/testrun.properties")
class CodeFirst3 : UITest() {
@Test
@DisplayName("Start calculator")
fun A0010() {
scenario {
case(1) {
condition {
it.macro("[Calculator Main Screen]")
}.expectation {
it.screenIs("[Calculator Main Screen]")
}
}
}
}
@Test
@DisplayName("Add")
fun A0020() {
scenario {
case(1) {
condition {
it.macro("[Calculator Main Screen]")
}.action {
it.tap("[1]")
.tap("[+]")
.tap("[2]")
.tap("[=]")
}.expectation {
it.select("[result final]")
.textIs("3")
}
}
}
}
@Test
@DisplayName("Divide by zero")
fun A0040() {
scenario {
case(1) {
condition {
it.macro("[Calculator Main Screen]")
}.action {
it.tap("[1]")
.tap("[÷]")
.tap("[0]")
.tap("[=]")
}.expectation {
it.select("[result preview]")
.textIs("Can't divide by 0")
}
}
}
}
}
テストとアプリがともに正しく実装されていれば、以下のようなSpec-Reportが出力されます。