TDD

stub

테오구 2022. 4. 22. 11:34
728x90

stub는 기존의 함수의 인터페이스를 모두 충족하는 다른 객체

 

product_service_no_di_refactor.js

class ProductService_stub {
  constructor(productClient) {
    // Dependency Injection에 맞게
    this.productClient = productClient
  }

  fetchAvailableItems() {
    return this.productClient
      .fetchItems()
      .then(items => items.filter(item => item.available))
  }
}

module.exports = ProductService_stub

stub_product_client.js

class StubProductClient {
  async fetchItems() {
    return [
      { item: '🥛', available: true },
      { item: '🍌', available: false },
    ]
  }
}

module.exports = StubProductClient

product_service_no_di_refact.test.js

// mock과 stub의 차이점
// mock은 기존의 함수를 흉내내는것에 불과하지만
// stub는 기존의 함수의 인터페이스를 모두 충족하는 다른 객체

const ProductService_stub = require('../product_service_no_di_refactor.js')
const StubProductClient = require('./stub_product_client.js')

describe('ProductService - Stub', () => {
  let productService

  beforeEach(() => {
    productService = new ProductService_stub(new StubProductClient())
  })

  it('should filter out only available items', async () => {
    const items = await productService.fetchAvailableItems()
    expect(items.length).toBe(1)
    expect(items).toEqual([{ item: '🥛', available: true }])
  })
})

 

728x90

'TDD' 카테고리의 다른 글

FIRST 원칙  (0) 2022.04.25
좋은 테스트 코드  (0) 2022.04.23
mock  (0) 2022.04.19
basic  (0) 2022.04.19
TDD란  (0) 2022.04.19