별 하나의 앱은 만들고 싶지 않습니다.

Labomart의 궤적. 구상부터 운영까지 @unotovive
유메미 Advent Calendar 2019의 마지막 기사

소개



Android 앱 개발자 여러분, Google I/O 2018의 다음 세션을 보셨습니까?

그건 그렇고, 나는,,,,,, 보지 못했습니다

세션에서는 Play 스토어에서 별 1 리뷰가있는 원인 분석을 공개합니다.

원인의 42%는 「앱의 크래쉬를 포함한 안정성의 문제」였던 것 같다.


출처: Youtube (Improve app performance and stability with Firebase (Google I/O'18))

별 1 리뷰를 받고 싶지 않아



시험을 쓰자 웃음

잘 테스트를 작성할 시간이 없다고 들었지만,

어쩌면 사양 조정이나 테스트 시간이 없을 뿐입니다.

제대로 사양 조정 및 테스트 시간을 받자

그리고 프로그램이나 사양의 버그를 씻어내는 것입니다

천리의 길도 한 걸음부터



테스트를 작성하는 것이 생각보다 간단합니다.

우선은 하나의 테스트를 써 봅시다! !

테스트는?



테스트 유형에는 다음과 같은 것이 있습니다.
  • 단위 테스트
  • 결합 테스트
  • UI 테스트

  • 이번에는 단위 테스트에 초점을 맞추고 이야기를 나갑니다!

    Android 단위 테스트



    Android 단위 테스트에는 다음이 포함됩니다.
  • Local Unit Test
  • Instrumented Unit Test

  • 무엇이 다른가요? ? 라는 느낌입니다만, 간단하게 말하면 실기나 에뮬레이터가 필요한지 어떤지입니다.

    이번에는 실제 기기나 에뮬레이터가 필요 없는 Local Unit Test를 해 갑니다!

    강한 의지로 테스트를 쓰자.



    시험을 쓰는 데 강한 의지는 필요하지 않습니다 w

    뭔가 부족했기 때문에 붙였습니다.

    글쎄, 테스트를 작성하려고합니다.

    모처럼이므로 최신 기술을 사용합니다

    이번에는 JUnit5Truth을 사용합니다!

    ※ Truth 는 assertThat 사용하기 위해 넣고 있습니다. 그냥 그냥 w

    준비



    여기에서 마침내 코드를 작성할 것입니다 ~

    아래와 같이 변경하여 Sync Now

    ※ ExampleUnitTest.kt는 필요하지 않으므로 삭제하십시오.

    app/build.gradle
    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'
    }
    

    테스트할 것



    이번에는 아래와 같은 String 의 확장 함수 만들어

    자주 있는 패스워드 체크 처리를 테스트해 갑니다!

    extensions/StringExtension.kt
    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)
    }
    

    테스트 실행! ! ! !



    test 패키지 아래에 다음 파일을 만듭니다!

    extensions/StringExtensionKtTest.kt
    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()
        }
    }
    

    그런 다음 isPassword() 메서드의 왼쪽에 있는 실행 표시를 누릅니다.

    테스트를 움직여보세요!

    테스트가 성공하면 기분 좋네요!

    ※ 테스트가 성공할 때마다 초록의 체크 마크가 버릇이 되어 갑니다

    여러 패턴 단번에 테스트하고 싶습니다.



    아까의 테스트에서는 하나만 테스트할 수 없다. .

    단번에 10개라든지 하고 싶다,, 어떻게 하면,,,

    네, 그럴 때 ParameterizedTest가 있습니다

    사용해보자~

    extensions/StringExtensionKtTest.kt
    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)
            )
        }
    }
    

    네, JUnit5 최고

    이것으로 여러 케이스 간단하게 테스트할 수 있네요♪

    쟈짱 테스트 케이스를 추가하십시오

    사실,,



    테스트에 실패하는 경우가 있습니다 웃음

    여러분을 찾았습니까?

    찾을 수없는 분은 테스트 케이스를 추가하십시오

    결론



    제대로 테스트를 작성하고 조금이라도 버그를 줄입니다.

    별 5 리뷰 많이 받으세요 ~

    내일은 @ihcamonoihS의 기사

    참고문헌


  • Android 테스트 전체
  • 언어별: 비밀번호용 정규식
  • Kotlin에서 JUnit 5를 사용해 보았습니다.
  • 좋은 웹페이지 즐겨찾기