【Android】TestParameterInjector를 사용하여 Parameterized 테스트를 실시합시다
13573 단어 안드로이드테스트parameterizedtest
소개
Google이 내놓고 있는 TestParameterInjector 을 사용하면, 빠르고 쉽게 Parameterized 테스트(파라미터화 테스트)를 쓸 수 있었으므로, 샘플 코드등을 실면서 설명하고 싶습니다.
TestParameterInjector에 관하여
자세한 것은 ㅡㅡㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 오 g b b g. 이 m/2021/03/인 t로즈신 g-하고 st 파라메 린지 c와 r. HTML의 블로그 기사를 참고해 주시면 좋겠습니다만, 간단하게 정리하면…
자세한 것은 ㅡㅡㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜㅜ 오 g b b g. 이 m/2021/03/인 t로즈신 g-하고 st 파라메 린지 c와 r. HTML의 블로그 기사를 참고해 주시면 좋겠습니다만, 간단하게 정리하면…
TestParameterInjector is now the most used framework for new tests in the Google codebase:
라는 느낌입니다.
사용하는 경우
testImplementation 'com.google.testparameterinjector:test-parameter-injector:1.3'
그리고
dependencies
에 추가하면 OK입니다. ( 1.3
는 쓰기시 버전)샘플 코드
샘플 코드를 섞으면서 TestParameterInjector
를 사용하면 어떻게 될지 설명합니다.
Piyo
테스트 대상 코드로 Piyo
클래스를 준비했습니다.
say
메서드가 있고 인수의 value
반환합니다.
class Piyo {
fun say(value: Int): String {
return when {
value % 2 == 0 -> "piyopiyo"
else -> "piyo"
}
}
}
PiyoTest
Piyo
에 대해 TestParameterInjector
를 사용하지 않고 소박한 테스트 코드를 작성하면 다음과 같이 될까요?보시면 알 수 있습니다만, 파라미터의 값(
value
)과 Assertion시의 값이 다른 이외는 거의 중복된 코드가 되어 버리고 있습니다.class PiyoTest {
@Test
fun piyo_say_piyopiyo_when_2() {
val value = 2 // ここと
val piyo = Piyo()
val result = piyo.say(value)
Assert.assertEquals("piyopiyo", result) // ここが違うだけ
}
@Test
fun piyo_say_piyo_when_1() {
val value = 1
val piyo = Piyo()
val result = piyo.say(value)
Assert.assertEquals("piyo", result)
}
@Test
fun piyo_say_piyo_when_3() {
val value = 3
val piyo = Piyo()
val result = piyo.say(value)
Assert.assertEquals("piyo", result)
}
@Test
fun piyo_say_piyopiyo_when_0() {
val value = 0
val piyo = Piyo()
val result = piyo.say(value)
Assert.assertEquals("piyopiyo", result)
}
}
TestParameterInjector를 사용해보기
Piyo
에 대해 TestParameterInjector
를 사용해 파라미터화 테스트를 작성해 보면 다음과 같이 됩니다.@RunWith(TestParameterInjector::class) // ← ①
class PiyoTest2 {
// ↓ ②
enum class PiyoTestCase(val value: Int, val expected: String) {
CASE0(0, "piyopiyo"),
CASE1(1, "piyo"),
CASE2(2, "piyopiyo"),
CASE3(3, "piyo"),
}
// ↓ ③
@Test
fun piyo_say(@TestParameter piyoTestCase: PiyoTestCase) {
val value = piyoTestCase.value // valueを使う
val piyo = Piyo()
val result = piyo.say(value)
Assert.assertEquals(piyoTestCase.expected, result) // expectedを使う
}
}
@RunWith
에서 TestParameterInjector
지정 PiyoTestCase
에서 인수( value
)와 기대값( expected
)의 조합 정의 @TestParameter
를 지정한 PiyoTestCase
를 지정한다 이렇게하면
테스트 코드
piyo_say
의 인수가-
CASE0
의 경우-
CASE1
의 경우-
CASE2
의 경우-
CASE3
의 경우그리고 네 번 호출됩니다.
↓실행한 결과도 이와 같이, 테스트 메소드는 1인데, 4개의 테스트 결과가 출력됩니다.
TestParameterInjector
의 적용 전·후에서 테스트 코드가 상당히 깨끗이 한 것을 알 수 있을까 생각합니다.기타 방법
위의 샘플 코드는 테스트 케이스를 enum으로 정의하고 테스트 메소드의 인수에 전달하는 방법이었지만,
Boolean
또는 Int
사용 @TestParameter
주석으로 필드에 정의 등도 가능합니다.
필드에 정의하면 테스트 코드 전체에서 매개 변수화되고 실행됩니다.
@RunWith(TestParameterInjector::class)
class MyTest {
@TestParameter
var isDryRun = false
@TestParameter("1", "2", "3")
var i = 0
@Test
fun test1(@TestParameter enableFlag: Boolean) {
// 12通りの組み合わせで呼ばれる
// test1[isDryRun=false,i=1,false]
// test1[isDryRun=false,i=1,true]
// test1[isDryRun=false,i=2,false]
// test1[isDryRun=false,i=2,true]
// test1[isDryRun=false,i=3,false]
// test1[isDryRun=false,i=3,true]
// test1[isDryRun=true,i=1,false]
// test1[isDryRun=true,i=1,true]
// test1[isDryRun=true,i=2,false]
// test1[isDryRun=true,i=2,true]
// test1[isDryRun=true,i=3,false]
// test1[isDryRun=true,i=3,true]
}
@Test
fun test2() {
// 6通りの組み合わせで呼ばれる
// test2[isDryRun=false,i=1]
// test2[isDryRun=false,i=2]
// test2[isDryRun=false,i=3]
// test2[isDryRun=true,i=1]
// test2[isDryRun=true,i=2]
// test2[isDryRun=true,i=3]
}
}
또 Advanced usage 로서 동적인
@TestParameter
의 생성등도 할 수 있는 것 같기 때문에, 흥미가 있는 분은 봐도 좋을지도 모릅니다.htps : // 기주 b. 코 m / go g / st 파라메 린지 c와 r # 아 d
끝에
TestParameterInjector
에 대한 간단한 설명과 샘플 코드를 소개했습니다.
테스트 코드가 놀라울 정도로 깨끗이 하기 때문에, 사용할 수 있는 곳에서는 적극적으로 사용해, 즐겁게 테스트 코드를 써 가고 싶은 곳입니다.
Reference
이 문제에 관하여(【Android】TestParameterInjector를 사용하여 Parameterized 테스트를 실시합시다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다
https://qiita.com/tsumuchan/items/eef87afc380c3e7efcb4
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념
(Collection and Share based on the CC Protocol.)
Reference
이 문제에 관하여(【Android】TestParameterInjector를 사용하여 Parameterized 테스트를 실시합시다), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/tsumuchan/items/eef87afc380c3e7efcb4텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)