별 하나의 앱은 만들고 싶지 않습니다.
↑ 유메미 Advent Calendar 2019의 마지막 기사
소개
Android 앱 개발자 여러분, Google I/O 2018의 다음 세션을 보셨습니까?
그건 그렇고, 나는,,,,,, 보지 못했습니다
세션에서는 Play 스토어에서 별 1 리뷰가있는 원인 분석을 공개합니다.
원인의 42%는 「앱의 크래쉬를 포함한 안정성의 문제」였던 것 같다.
출처: Youtube (Improve app performance and stability with Firebase (Google I/O'18))
별 1 리뷰를 받고 싶지 않아
시험을 쓰자 웃음
잘 테스트를 작성할 시간이 없다고 들었지만,
어쩌면 사양 조정이나 테스트 시간이 없을 뿐입니다.
제대로 사양 조정 및 테스트 시간을 받자
그리고 프로그램이나 사양의 버그를 씻어내는 것입니다
천리의 길도 한 걸음부터
테스트를 작성하는 것이 생각보다 간단합니다.
우선은 하나의 테스트를 써 봅시다! !
테스트는?
테스트 유형에는 다음과 같은 것이 있습니다.
테스트 유형에는 다음과 같은 것이 있습니다.
이번에는 단위 테스트에 초점을 맞추고 이야기를 나갑니다!
Android 단위 테스트
Android 단위 테스트에는 다음이 포함됩니다.
무엇이 다른가요? ? 라는 느낌입니다만, 간단하게 말하면 실기나 에뮬레이터가 필요한지 어떤지입니다.
이번에는 실제 기기나 에뮬레이터가 필요 없는 Local Unit Test를 해 갑니다!
강한 의지로 테스트를 쓰자.
시험을 쓰는 데 강한 의지는 필요하지 않습니다 w
뭔가 부족했기 때문에 붙였습니다.
글쎄, 테스트를 작성하려고합니다.
모처럼이므로 최신 기술을 사용합니다
이번에는 JUnit5과 Truth을 사용합니다!
※ Truth 는 assertThat 사용하기 위해 넣고 있습니다. 그냥 그냥 w
준비
여기에서 마침내 코드를 작성할 것입니다 ~
아래와 같이 변경하여 Sync Now
※ ExampleUnitTest.kt는 필요하지 않으므로 삭제하십시오.
app/build.gradleandroid {
...
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
}
dependencies {
...
- testImplementation 'junit:junit:4.12'
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
+ testImplementation "org.junit.jupiter:junit-jupiter-params:5.5.2"
+ testImplementation 'com.google.truth:truth:1.0'
}
테스트할 것
이번에는 아래와 같은 String 의 확장 함수 만들어
자주 있는 패스워드 체크 처리를 테스트해 갑니다!
extensions/StringExtension.ktpackage {自分のパッケージ名}.extensions
/**
* パスワードの条件
*
* 半角英小文字・大文字・数字をそれぞれ1種類以上含む
* 8文字以上10文字以下
*/
fun String.isPassword(): Boolean {
val regex = Regex("""
^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[a-zA-Z\d]{8,10}${'$'}
""".trimIndent())
return matches(regex)
}
테스트 실행! ! ! !
test 패키지 아래에 다음 파일을 만듭니다!
extensions/StringExtensionKtTest.ktpackage {自分のパッケージ名}.extensions
import org.junit.jupiter.api.Test
import com.google.common.truth.Truth.assertThat
internal class StringExtensionKtTest {
@Test
fun isPassword() {
val password = "1234abcdAB"
assertThat(password.isPassword()).isTrue()
}
}
그런 다음 isPassword() 메서드의 왼쪽에 있는 실행 표시를 누릅니다.
테스트를 움직여보세요!
테스트가 성공하면 기분 좋네요!
※ 테스트가 성공할 때마다 초록의 체크 마크가 버릇이 되어 갑니다
여러 패턴 단번에 테스트하고 싶습니다.
아까의 테스트에서는 하나만 테스트할 수 없다. .
단번에 10개라든지 하고 싶다,, 어떻게 하면,,,
네, 그럴 때 ParameterizedTest가 있습니다
사용해보자~
extensions/StringExtensionKtTest.ktpackage {自分のパッケージ名}.extensions
import com.google.common.truth.Truth.assertThat
import org.junit.jupiter.api.extension.ExtensionContext
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.Arguments.arguments
import org.junit.jupiter.params.provider.ArgumentsProvider
import org.junit.jupiter.params.provider.ArgumentsSource
import java.util.stream.Stream
internal class StringExtensionKtTest {
@ParameterizedTest
@ArgumentsSource(TestCase::class)
fun isPassword(password: String, expected: Boolean) {
assertThat(password.isPassword()).isEqualTo(expected)
}
private class TestCase : ArgumentsProvider {
override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> = Stream.of(
arguments("1234abcdAB", true),
arguments("abcdAB1234", true),
arguments("1234abcdab", false)
)
}
}
네, JUnit5 최고
이것으로 여러 케이스 간단하게 테스트할 수 있네요♪
쟈짱 테스트 케이스를 추가하십시오
사실,,
테스트에 실패하는 경우가 있습니다 웃음
여러분을 찾았습니까?
찾을 수없는 분은 테스트 케이스를 추가하십시오
결론
제대로 테스트를 작성하고 조금이라도 버그를 줄입니다.
별 5 리뷰 많이 받으세요 ~
내일은 @ihcamonoihS의 기사
참고문헌
android {
...
+ kotlinOptions {
+ jvmTarget = '1.8'
+ }
}
dependencies {
...
- testImplementation 'junit:junit:4.12'
+ testImplementation 'org.junit.jupiter:junit-jupiter-api:5.5.2'
+ testRuntimeOnly 'org.junit.jupiter:junit-jupiter-engine:5.5.2'
+ testImplementation "org.junit.jupiter:junit-jupiter-params:5.5.2"
+ testImplementation 'com.google.truth:truth:1.0'
}
package {自分のパッケージ名}.extensions
/**
* パスワードの条件
*
* 半角英小文字・大文字・数字をそれぞれ1種類以上含む
* 8文字以上10文字以下
*/
fun String.isPassword(): Boolean {
val regex = Regex("""
^(?=.*?[a-z])(?=.*?[A-Z])(?=.*?\d)[a-zA-Z\d]{8,10}${'$'}
""".trimIndent())
return matches(regex)
}
package {自分のパッケージ名}.extensions
import org.junit.jupiter.api.Test
import com.google.common.truth.Truth.assertThat
internal class StringExtensionKtTest {
@Test
fun isPassword() {
val password = "1234abcdAB"
assertThat(password.isPassword()).isTrue()
}
}
package {自分のパッケージ名}.extensions
import com.google.common.truth.Truth.assertThat
import org.junit.jupiter.api.extension.ExtensionContext
import org.junit.jupiter.params.ParameterizedTest
import org.junit.jupiter.params.provider.Arguments
import org.junit.jupiter.params.provider.Arguments.arguments
import org.junit.jupiter.params.provider.ArgumentsProvider
import org.junit.jupiter.params.provider.ArgumentsSource
import java.util.stream.Stream
internal class StringExtensionKtTest {
@ParameterizedTest
@ArgumentsSource(TestCase::class)
fun isPassword(password: String, expected: Boolean) {
assertThat(password.isPassword()).isEqualTo(expected)
}
private class TestCase : ArgumentsProvider {
override fun provideArguments(context: ExtensionContext?): Stream<out Arguments> = Stream.of(
arguments("1234abcdAB", true),
arguments("abcdAB1234", true),
arguments("1234abcdab", false)
)
}
}
제대로 테스트를 작성하고 조금이라도 버그를 줄입니다.
별 5 리뷰 많이 받으세요 ~
내일은 @ihcamonoihS의 기사
참고문헌
Reference
이 문제에 관하여(별 하나의 앱은 만들고 싶지 않습니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://qiita.com/blendthink/items/5f9a22c0a42c77179e09텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)