Honey-Programming

[TIL-015] 20.08.07 본문

코드스테이츠/Today I Learned

[TIL-015] 20.08.07

Latte_is_horse 2020. 8. 7. 19:55

1. Summary(3 Line)

프리코스 10일차(3줄 요약)

- 이제 절반이 지나갔다... 2주... 앞으로 2주 남았다

- 컨디션 관리를 잘하자... 

- 오늘도 테스트 프레임 워크

 


2. Today's Todo

 

  • TDD / BDD / DDD
  • Test Framework
    - Mocha

    - chai

       @ assert
       @ expect
       @ should
    - Jest
    - Supertest
    - Jasmine

    - Karma

#1. TDD / BDD / DDD

1) TDD (Test-Driven-Development) 

: 테스트 주도 개발로써, 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고

해당 테스트를 통과하는 가장 짧고 가독성이 좋고 유지보수성이 뛰어난 코드를 작성한다.

 

2) BDD (Behavior-Driven-Development)

: TDD를 포함하고 있는 개념이면서 한발 더 나아가 시나리오 기반으로 테스트 케이스를 작성하며

함수 단위 테스트를 권장하지 않으며, 개발자가 아닌 사람이 봐도 이해할 수 있을 정도의 레벨을 권장한다

비지니스 요구 사항이 변경되었을 때 기존 테스트 코드를 수정하는데 있어 TDD보다 BDD가 효율적이다.

 

3) DDD (Domain-Driven-Development)

: 소프트웨어의 복잡성을 최소화하는 것이 목적이다. 요구사항을 쉽게 반영 할 수 있다. 테스트가 쉽다.

소통이 원활하게 이루어질 수 있다. 개발 범위를 쉽게 파악하고 스케줄링 할 수 있다. 설계의 일관성

 

 

BDD (Behaviour-Driven Development)에 대한 간략한 정리 | Popit

단위 테스트는 단순히 테스트 코드가 아니라 리펙토링을 위한 안전망이며 코드를 설명하는 문서 역할도 한다.

www.popit.kr

 

 

 

[개발상식] 22. 테스트 주도 개발에 대하여 - TDD와 BDD 그리고 DDD

TDD Test-Driven Development(TDD)는 매우 짧은 개발 서클의 반복에 의존하는 소프트웨어 개발 프로세스이다. 우선 개발자는 요구되는 새로운 기능에 대한 자동화된 테스트케이스를 작성하고 해당 케스��

asfirstalways.tistory.com

 

#2 Test Framework

1) Mocha

: 2011년부터 가장 인기있는 javascript 테스트 프레임 워크 중 하나 였다. 

이점 : 확장성 용이  /  디버거 지원  /  모든 브라우저에 대한 지원 제공  /  정확한 보고

/ 개발자가 테스트 케이스 작성하기 매우 편리한 프레임 워크 

 

설치 : 

$ npm install mocha --global

$ npm install mocha --save-dev

 

Ex1) x를 n번 곱하는 함수, pow(x, n)를 구현하려 하는데, 유스 케이스를 만들어 본다. ( n은 자연수, n >= 0 )

 

Mocha 테스트 케이스는 3가지 주요 구성 요소 갖춰진다.

  1. describe("title", function() { ... })

- 구현하고자 하는 기능에 대한 설명 pow가 어떤 동작을 하는지에 대한 설명

  2. it("유스 케이스 설명", function() { ... })

- 첫 번째 인수(특정 유스 케이스에 대한 설명, 자연어로 작성)

- 두 번째 인수(유스 케이스 테스트 함수)

  3. assert.equal(value1, value2)

- assert. * 은 pow가 예상한 대로 동작하는지 확인해준다.

밑에 assert.equal 함수는 인수끼리(value1, value2) 서로 동등 비교했을 때 다르면 에러를 반환

아래 코드에서 pow(2, 3) 의 결과값과 8을 비교한다

 

describe("pow", function() {

  it("주어진 숫자의 n 제곱", function() {
    assert.equal(pow(2, 3), 8);
  });

});

 

 

Ex2) Testbuilder에 있는 예시1

describe("Diner's Club", function() {

  it("has a prefix of 38 and a length of 14", function() {
    if (detectNetwork("38345678901234") !== "Diner's Club") {
      throw new Error("Test failed"); // throw new Error('예외가 되는 상황을 알려준다.')
    }
  });

  it("has a prefix of 39 and a length of 14", function() {
    if (detectNetwork("39345678901234") !== "Diner's Club") {
      throw new Error("Test failed"); 
    }
  });
});

Ex3) Testbuilder에 있는 예시2

describe("American Express", function() {
  // if/throw 구문은 번거로우므로 수를 하나 제공. 입력값이 true가 아닐 경우 에러를 발생
  let assert = function(isTrue) {
    if (!isTrue) {
      throw new Error("Test failed");
    }
  };

  it("has a prefix of 34 and a length of 15", function() {
    assert(detectNetwork("343456789012345") === "American Express");
  });

  it("has a prefix of 37 and a length of 15", function() {
    assert(detectNetwork("373456789012345") === "American Express");
  });
});

 

 

 

 

 

nodejs 테스트 도구와 방법론 (테스트의 중요성, 전략, mocha, chai, sinon, istanbul, 유용한 팁)

1. 테스트를 왜 해야하는가? 테스트를 안하는 개발자는 없다. 코드 작성 후 서버를 뛰워서 api url을 호출해서 응답값을 확인해보고, UI에서 버튼을 눌러보고 하는 것도 모두 테스트이다. 그러나 여

sjh836.tistory.com

 

[Mocha]JavaScript에서 Unit Test하기 - 왕초보만

참고: [JUnit]JUnit IDE에서 사용하기(1) [JUnit]JUnit으로 유닛 테스팅하기(2) https://mochajs.org/ 유닛테스트에 대한 설명은 추가적으로 하지 않겠다. 어짜피 필요한 사람만 할테니까. 그런데 자세히 설명도

kamang-it.tistory.com

 

 

2) Chai

: Chai는 테스트에 필요한 헬퍼 함수들이 담긴 라이브러리입니다!

영어 문법에 가까운 코드로 테스트를 사용할 수 있게 도와줌

Chai도 Mocha와 거의 비슷한거 같았다. Chai는 3가지 방법이 있다.

 

설치 :

$ yarn global add chai

 

 

1) chai assert

: 기본적으로 node에서 제공하는 Assert 라이브러리와 유사

호출 방식 : chai.assert;

describe("Visa", function() {
  let assert = chai.assert; 

  it("has a prefix of 4 and a length of 13", function() {
    assert(detectNetwork("4123456789012") === "Visa");
  });

  it("has a prefix of 4 and a length of 16", function() {
    assert(detectNetwork("4123456789012345") === "Visa");
  });

  it("has a prefix of 4 and a length of 19", function() {
    assert(detectNetwork("4123456789012345678") === "Visa");
  });
});

 

2) chai assert - expect 용법

: BDD 스타일로 제공되는 인터페이스 중 하나로 chaining을 제공하여 코드를 작성할 수 있게 해준다고 한다.

호출 방식 : chai.expect;

describe("MasterCard", function() {
  let expect = chai.expect;

  it("has a prefix of 51 and a length of 16", function() {
    expect(detectNetwork("5112345678901234")).to.equal("MasterCard");
  });

  it("has a prefix of 52 and a length of 16", function() {
    expect(detectNetwork("5212345678901234")).to.equal("MasterCard");
  });

  it("has a prefix of 53 and a length of 16", function() {
    expect(detectNetwork("5312345678901234")).to.equal("MasterCard");
  });
});

 

3) chai assert - should 용법

: BDD 스타일로 제공되는 인터페이스 중 하나로 chaining을 통한 API를 제공

호출 방식 : chai.should();

describe("MasterCard", function() {
  let should = chai.should();

  it("has a prefix of 54 and a length of 16", function() {
    detectNetwork("5412345678901234").should.equal('MasterCard');
  });

  it("has a prefix of 55 and a length of 16", function() {
    detectNetwork("5512345678901234").should.equal('MasterCard');
  });
});

 

 

Chai

  Powered by Open Source Chai is hosted on GitHub. Have a suggestion or found a bug? Fork this project to help make Chai even better. Even this documentation site is open source and available for contribution.

www.chaijs.com

 

Mocha Tutorial - Step 02. Chai

Step 01: Hello World!에서는 기본적인 Mocha 사용법에 대해 알아보았다.이번 Step 02에서는 Step 01: Hello World!에서 언급한 Assertion library에 대해 어떻게 사용하는지와 어떤 것인지를 알아보도록 하자.

kdydesign.github.io

 

3) Jest

: Facebook에서 사용하고 유지 관리하는 JavaScript 테스트 프레임 워크. '제로 구성' 테스트 경험을 제공

이점 : React 기반 애플리케이션에 가장 선호되는 프레임 워크(명확하고 편리한 UI 제공)

/  빠르고 고성능  /  문서 지원이 포함 된 표준 구문  /  라이브 스냅 샷 사용

 

설치 : $ npm i -D jest

package.json 안에 test script 를 추가해준다."scripts": { ... "test": "jest" ... }

 

 

Jest로 기본적인 테스트 작성하기

Engineering Blog by Dale Seo

www.daleseo.com

 

4) Supertest

: mocha가 하나의 함수를 테스트했다면, 통합테스트(api 기능 테스트)에서 사용하는 라이브러리

api 서버라면 내부적으로 express 구동 -> 요청보낸 뒤 결과 검증까지함(시나리오 코드 작성)

 

설치 : npm i -D jest supertest

package.json 안에 test script 를 추가해준다."scripts": { ... "test": "jest" ... }

 

 

Node.js로 만든 API 테스트(supertest)

주로 웹 기술에 대해 이야기 합니다

jeonghwan-kim.github.io

 

5) Jasmin
: 2010년에 나온 JavaScript 테스트 프레임 워크. 모든 유형의 JavaScript 애플리케이션 테스트 가능

이점 : BDD (Behavioral Driven Development)지원  /  깔끔하고 간단한 구문 제공  /  DOM이 필요 없다 

/  프론트 엔드 테스트에 매우 유용  /  자연어와 매우 유사해서 코딩 쉽다  /  강력한 문서 

 

6) Karma

: 오픈 소스 생산 테스트 환경. 다양한 환경에서 애플리케이션에 대한 테스트 수행 가능

이점 : 실제 기기 및 브라우저에서 테스트 가능  /  원격 테스트 지원  

 

 

 

[node.js] TDD 라이브러리 - mocha, assert, should, supertest

[TDD : Test Driven Develop] - 테스트 주도 개발 : 처음부터 모든 기능을 개발하기보다 테스트 코드를 먼저 개발하고 테스트 한 뒤 개발 - 테스트 해보고 원하는 결과값이 나오는지 확인하고! - 유지 보��

jinbroing.tistory.com

 

'코드스테이츠 > Today I Learned' 카테고리의 다른 글

[TIL-018] 20.08.12  (0) 2020.08.12
[TIL-016] 20.08.10  (0) 2020.08.10
[TIL-014] 20.08.06  (0) 2020.08.06
[TIL-013] 20.08.05  (1) 2020.08.05
[TIL-012] 20.08.04  (0) 2020.08.04
Comments