안드로이드 TDD
Given-When-Then
- 만일 조건이 여러개라면 given만 쓰는 것이 아니라 And도 같이 써주면 좋다
Gherkin 문법
- 쇼핑 장바구니 앱을 TDD 한다고 가정
- 먼저 기능 목록 작성
기능 목록
Given 상품을 받아올 수 있다.
When 상품을 받아오라는 요청을 보낸다.
Then 상품 목록이 노출된다.
Given 상품을 장바구니에 추가할 수 있는 상태다.
When 장바구니 상품이 담겼다는 알림이 뜬다.
Then 장바구니 상품이 담겼다는 알림이 뜬다.
And 장바구니 상품 수가 증가한다.
And 장바구니 상품 수가 업데이트 된다.
Given
When 상품 상세 확인 요청을 보낸다.
Then 상품 상세가 노출된다,
MainPresenterTest
private lateinit var presenter: MainContract.Presenter
private lateinit var view: MAinContract.View
private lateinit var repository: ProductRepository
@Before
fun setUp() {
view = mockk()
presenter = MainPresenter(view, repository)
}
@Test
fun `홈 화면에 상품이 노출된다.` () {
// Given 상품을 받아올 수 있다.
// every { view.showProducts() } just Runs
vavl products = ProductFixture.products
justRun { view.showProducts(ProductFixture.products) }
every { repository.fetchProducts() } returns ProductFixture.products
// When 상품을 받아오라는 요청을 보낸다.
presenter.fetchProducts()
// Then 상품 목록이 노출된다.
verifyc { view.showProducts(ProductFixture.products) }
}
ProductFixture
object ProductFixture {
val prdducts = listOf(
Product(
id = 4934,
name = "as",
price = 1200,
imageUrl = "",
)
)
}
- TDD를 할 땐 인터페이스를 통해 실질적인 구현이 되지 않아도 행동을 정의할 수 있음
- 따라서 미리 정의해 놓는 것이 좋다
테스트 역할
- 가장 큰 역할은 문서화 역할
- 요구사항 검증 역할
인수 테스트
- 가장 첫 번째 큰 단계는 기능목록 만들기임을 명심해라!!!!