티스토리 뷰
1. Naming your tests
테스트의 의도를 명시적으로 표현하기위해 테스트의 이름은 다음 세 부분으로 구성되어야 합니다.
a. 테스트할 메서드의 이름
b. 테스트 중인 시나리오
c. 시나리오에서 호출될 때 예상되는 동작 결과
테스트는 단순히 코드가 동작하는지 확인하는 것 이상으로, 테스트 코드를 살펴봄으로써 코드의 동작을 유추할 수 있어야합니다.
Bad:
fun test_Single() {
var stringCalculator = StringCalculator()
var actual = stringCalculator.add("0")
assertEquals(0, actual)
}
Better:
fun add_SingleNumber_ReturnsSameNumber() {
var stringCalculator = StringCalculator()
var actual = stringCalculator.add("0")
assertEquals(0, actual)
}
2. Arranging your tests
테스트 작성시, Arrange, Act, Assert 세가지 주요 작업으로 구성합니다
Arrange - 필요한 개체를 정렬하고 필요에 따라 만들고 설정합니다 (mock, stub, spy 등)
Act - 테스트할 메서드를 동작합니다
Assert - 동작 결과와 예상 결과를 어설션 합니다.
가독성은 테스트를 작성할 때 가장 중요한 측면 중 하나입니다. 테스트 내에서 이러한 작업을 각각 구분하면 코드를 호출하는 데 필요한 종속성, 코드 호출 방법 및 어설션하려는 대상이 명확하게 강조 표시할 수 있습니다
Bad:
fun add_EmptyString_ReturnsZero() {
// Arrange
var stringCalculator = StringCalculator()
// Assert
assertEquals(0, stringCalculator.add(""))
}
Better:
fun add_EmptyString_ReturnsZero() {
// Arrange
var stringCalculator = StringCalculator()
// Act
var actual = stringCalculator.add("")
// Assert
assertEquals(0, actual)
}
3. Avoid magic strings
테스트를 작성할 때는 가능한 한 많은 의도를 표현하는 것을 목표로 해야 합니다.
Bad:
fun add_BigNumber_ThrowsException() {
var stringCalculator = StringCalculator()
Action actual = stringCalculator.add("1001")
assertThrows<OverflowException>(actual)
}
Better:
fun add_BigNumber_ThrowsException() {
var stringCalculator = StringCalculator()
val MAXIMUM_RESULT = "1001";
Action actual = stringCalculator.add(MAXIMUM_RESULT)
assertThrows<OverflowException>(actual)
}
4. Avoid logic in tests
단위 테스트를 작성할 때 if, while, for, switch 등의 논리 조건을 사용하지않습니다.
논리식에 의한 버그가 발생할 가능성이 있습니다. 테스트 코드는 높은 수준의 확신이 있어야합니다.
논리식 사용이 불가피한 경우, 테스트를 두 개 이상의 다른 테스트로 분할하는 것이 좋습니다.
Bad:
fun add_MultipleNumbers_ReturnsCorrectResults() {
val stringCalculator = StringCalculator()
var expected = 0
val testCases = listOf<String>(
"0,0,0",
"0,1,2",
"1,2,3"
)
for( test in testCases) {
assertEquals(expected, stringCalculator.add(test));
expected += 3;
}
}
Better:
fun add_MultipleNumbers_ReturnsCorrectResults(input: String, expected: Integer) {
val stringCalculator = StringCalculator()
val actual = stringCalculator.add(input)
assertEquals(expected, actual)
}
reference
Unit testing best practices with .NET Core and .NET Standard - Microsoft
'Android' 카테고리의 다른 글
[Unit Test] 유닛 테스트 Troubleshooting - 2. Rx Scheduler (0) | 2021.01.04 |
---|---|
[Unit Test] 유닛 테스트 Troubleshooting - 1. android.util.Log not mocked (0) | 2021.01.04 |
[Unit Test] 유닛 테스트 Component - 6. Verify (0) | 2021.01.04 |
[Unit Test] 유닛 테스트 Component - 5. Assert (0) | 2021.01.04 |
[Unit Test] 유닛 테스트 Component - 4. Spy Object (0) | 2021.01.04 |
- Total
- Today
- Yesterday
- 테스트
- Leetcode
- unit test
- 안드로이드 컴포즈
- button padding
- 안드로이드 커스텀 버튼
- 커스텀 버튼
- 안드로이드 단위 테스트
- 알고리즘 풀이
- android compose
- 안드로이드 유닛 테스트
- 알고리즘
- android unit test
- compose ui
- ViewCompositionStrategy
- android test
- 유닛테스트
- 안드로이드 종속성 주입
- 구글
- Unit
- androud hilt
- 유닛 테스트
- 코딩테스트
- android custom button
- Android
- 안드로이드 테스트
- 컴포즈 초기화
- 안드로이드
- AOS
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | 6 | 7 |
8 | 9 | 10 | 11 | 12 | 13 | 14 |
15 | 16 | 17 | 18 | 19 | 20 | 21 |
22 | 23 | 24 | 25 | 26 | 27 | 28 |
29 | 30 | 31 |