Android 개발 시, 테스트 코드의 필요성과 작성법에 대해 작성한 포스트 입니다.
1. 값이 원하는 형태가 되는가.
2. 원하는 동작을 연계해서 수행하는가.
처음 공부할 때 이부분이 가장 의문이었습니다.
왜 테스트를 작성해야하지?🧐 테스트 코드를 작성하면 개발 리소스만 더 드는 것이 아닌가?
QA팀에서 해야할 일을 왜 개발팀에서 해야하는거지?
하지만 테스트 코드를 작성하면 다음과 같은 이점을 얻을 수 있습니다.
1. 개발 시간을 줄여준다.
테스트 코드를 작성하는 것은 분명 리소스가 드는 일입니다. 하지만 테스트 코드를 작성하게 되면 개발자가 코드 작성 후 직접 버튼을 하나 하나 클릭해서 테스트 해보는 것보다 훨씬 더 빠르게 실행 시켜볼 수 있습니다.
또한 다른 코드 작업으로 발생한 Side Effect를 좀 더 빠르게 찾을 수 있습니다. 이전 작성한 Unit Test가 제대로 동작한다면 신규 작업한 코드의 문제이므로, 신규 코드에 문제가 있구나! 하며 문제점을 빠르게 파악하고 대응할 수 있습니다.
2. Testable Architecture
테스트 코드 작성을 위해서는 Testable Architecture가 필수적입니다.
아키텍쳐 설계가 제대로 이루어지지 않는다면 테스트 코드 작성은 분명 어려워 질 것입니다.
테스트 코드 작성을 염두에 두고 Architecture를 설계한다면 이는 분명 좋은 Architecture가 될 것입니다.
좋은 Architecture란?
- 높은 응집도
비슷한 역할을 하는 메소드, 로직을 모아 놓는 것을 이야기 합니다.- 낮은 결합도
요구사항이 변경되었을 때, 유연하게 대처할 수 있는 가를 이야기 합니다.
즉 메소드 하나를 건드릴 때 다른 메소드에 영향을 미치게 된다면 이는 높은 결합도를 가진다고 이야기 합니다.
3. 코드 리뷰를 돕는다
테스트 코드는 A를 넣었을 때 B라는 값을 리턴한다. 라는 것을 리뷰어들에게 알려줍니다.
리뷰어들은 해당 내용을 보고 이 메소드는 어떤 기능을 하는 것이구나 쉽게 파악하고 질 좋은 코드리뷰를 할 수 있습니다.
지금까지 테스트 코드를 작성하면 얻는 이점들에 대해 알아보았습니다. 작성의 필요성을 조금씩 느끼죠?
하지만 테스트 코드를 작성하는 것은 쉬운 일은 아닙니다. 안드로이드에서 테스트 코드 작성에 어려움을 주는 것들이 있는데요. 대표적인 두 가지만 소개해보겠습니다.
class UserListPresenter(repository: Repository, view:View) {
fun loadAllUserList() {
repository.loadAllUserList()
.subscribe(
{view.showUserList(it)},
{it.printStackTrace()}
)
}
}
테스트를 어렵게 만드는 것을 살펴보았는데요. 그럼 저런 어려움을 어떻게 해쳐나가야 하는 것일까요? 테스트 작성에 도움을 주는 원칙을 소개하겠습니다.
이번 포스팅에서는 이런 것들을 살펴보았습니다.
- 테스트란 무엇인가
- 테스트는 왜 해야하는가
- 어떤 요소가 테스트를 어렵게 하는가
- 테스트를 쉽게 하는 원칙
그럼 테스트 코드는 구체적으로 어떻게 작성을 해야할까요?
아까 말했던 의존성 객체를 주입받는다? / Wrapping해서 주입한다는 말은 무슨 말일까요?
다음 포스팅에서 구체적인 테스트 코드 작성방법에 대해 알아보겠습니다.
감사합니다 😃