DevLog__[javascript: TestBuilder]

Jaewon Lee·2020년 9월 22일
0

Javascript

목록 보기
4/12
post-thumbnail

# Intro

생략. 요새 코딩외에 하는게 없어서 일상이라고 할게 없다. 추석까지 일단 목표한 것이 있기 때문에 달려봅니다. 운동은 그 이후에 귀릿👻

# TestBuilder

테스트빌더를 처음 들었을 때 어려울 것 같았지만, 접해보니 괜찮았다! 아직 덜 알아서 그런가...차그차근 다시 알아보자

가즈아!!!!!🔥


1. TestBuilder


1) TestBuilder란?

  • 프로그램을 실제 서비스환경에 배포하기 전에 개발자가 원하는 바와 일치하는 방향으로 설계가 되었는지 효율적으로 확인하기 위해서 거치는 단계로서 코드의 안정성을 검토한다.

2) 디버깅

  • 버그를 잡는 행위
  • 프로그램의 행동들에 원인을 붆석하기 위한 기술
  • 문법이아닌 로직상에 에러가 발생했을 경우,문제의 원인이라고 생각되는 부분을 선정하고 가설이 맞는지 틀린지 실험한다.
  • 한번에 여러개 가설을 세우지 않고, 독립적인 가설을 세워야 한다.

3) 유용한 테스트 방법

  1. 경우의 수를 정리한다.
  2. 경우의 수에 대해서 하나씩 기대값과 실제값 비교
    • 이것을 우리는 유닛 테스트라고 부른다.
    • 이러한 개발 방법론을 테스트 주도 개발(TDD: Test Driven Development)이라고 부른다.

4) 유닛 테스트

  • 왜 해야할까?
    프로그램의 함수는 서로가 약속한 대로 작동하게 된다면 아주 복잡한 프로그램도 만들 수 있게 된다. 자신이 작성한 함수들이 의도대로 동작하는지 알아보기 위해서 유닛테스트를 진행한다.

  • 어디에 해야할까?
    사소한 함수를 제외한 모든 함수에

  • 유닛 테스트의 구성요소

    • Assertions function
    • Matcher

5) 테스트 주도 개발

TDD(Test-driven Development)는 코드를 작성하기 전에 테스트를 쓰는 방법론입니다. 개발자 자신이 바람직하다고 생각하는 코드의 결과를 미리 정의하고, 이것을 바탕으로 코드를 작성하는 법이다.

  • TDD Flow
  1. 함수 설계
  2. 테스트 코드 작성
  3. 코드 작성

기존 개발 방식과 다른점은 테스트 코드를 먼저 작성한다는 것이다. 함수 설계 후 의도한 결과를 바탕으로 테스트 코드를 작성한다. 이 후 테스트 코드가 의도한 결과가 나올 때 까지 수정 한 후, 완성된 테스트 코드를 바탕으로 실제 코드를 작성한다. 이렇게 개발하면 중간 산출물로 테스트 코드가 남게 되는데, 이후 리팩토링(Refactoring)등 소스코드 수정 후 수동으로 테스트 해볼 필요 없이 이전에 만든 테스트 코드를 돌려서 통과하는지만 체크하면 된다. 따라서 프로그래머는 부작용이 발생하더라도 적은 비용(그냥 테스트 코드만 쭉 돌려보면 되니까)으로 이를 탐지할 수 있기 때문에 테스트 비용을 크게 줄일 수 있다.

6) Mocha와 chai

Mocha

  • 자바스크립트 테스트 프레임 워크
  • 모카를 사용하면 원하는 어설션 라이브러리를 사용할 수 있다. (ex. chai)
  • describe()으로 테스트 suite을 만들고 그 안에 it()으로 테스트 코드를 작성한다. descirbe()은 중첩해서 사용할 수 있다.
  • 모카는 기본적으로 2초 내로 테스트를 완료하도록 한다. 만약 이를 초과하면 아래와 같은 에러 메시지를 출력할 것이다.
    ex.
    " Error: timeout of 2000ms exceeded. Ensure the done() callback is being called in this test."

Chai

  • Chai는 BDD / TDD 어설 션 라이브러리입니다.
  • Chai에는 개발자가 가장 편한 것을 선택할 수있는 몇 가지 인터페이스가 있습니다.
    Assert
    //Assert
    var assert = chai.assert;
    var assert = require('chai').assert
     , foo = 'bar'
     , beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
    assert.typeOf(foo, 'string'); // without optional message
    assert.typeOf(foo, 'string', 'foo is a string'); // with optional message
    assert.equal(foo, 'bar', 'foo equal `bar`');
    assert.lengthOf(foo, 3, 'foo`s value has a length of 3');
    assert.lengthOf(beverages.tea, 3, 'beverages has 3 types of tea');
    expect / should
    /
    /html
    <script src="chai.js" type="text/javascript"></script>
    //expect
    let expect = chai.expect;
    var expect = require('chai').expect
     , foo = 'bar'
     , beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
    expect(foo).to.be.a('string');
    expect(foo).to.equal('bar');
    expect(foo).to.have.lengthOf(3);
    expect(beverages).to.have.property('tea').with.lengthOf(3);
    //should
    let should = chai.should();
    var should = require('chai').should() //actually call the function
     , foo = 'bar'
     , beverages = { tea: [ 'chai', 'matcha', 'oolong' ] };
    foo.should.be.a('string');
    foo.should.equal('bar');
    foo.should.have.lengthOf(3);
    beverages.should.have.property('tea').with.lengthOf(3)

# Work Off


자신이 개발한 코드의 안정성과 리팩토링 측면에서 TDD(테스트 주도 개발)는 중요한 의미를 지녔다고 생각한다. 이제 html과 css, DOM을 공부하고 있는데 추석 때 깃허브, 테스트빌더, html, css, DOM을 전부 이용한 solo project를 진행해보면 어떨까 하는...? 생각이 든다. 그렇게 하면 머리속에 한번에 정리할 수 있을 것 같다는 생각이 들었다.

블로그가 공부하는 속도에 비해서 조금 밀리는데, 그래도 꾸준히 올릴 생각이다. 블로깅 하는 것에 부담감을 갖지 않고 확실히 공부하고 정리할 것이다. 역시 나는 최고다 하하. 밤이라서 헛소리가 나오지만 객체지향 프로그래밍과 매개변수를 정리하러 이만 마무리하겠다. 짜요!🙌

[참고문서]
200806_TIL, oh_ji_0, https://velog.io/@oh_ji_0/200806TIL 2020.08.06 (접속일: 2020.09.23 02:02AM)

NodeJS에서 가장 많이 사용하는 테스트 프레임웍, Mocha, 김정환, https://jeonghwan-kim.github.io/mocha/ 2016.01.05 (접속일: 2020.09.23 02:02AM)

기본기가 탄탄한 풀스택 개발자가 되는 그날까지 🔥🔥🔥

profile
Communication : any

0개의 댓글