DAY32

yejichoi·2022년 12월 19일
0
post-thumbnail

1. Algorithm Study

2. Backend Class

TDD( Test Driven Development)

  • 테스트 주도 개발
  • 반복 테스트를 이용한 소프트웨어 방법론으로 작은 단위의 테스트 케이스를 작성하고 이를 통과하는 코드를 추가하는 단계를 반복하여 구현
  • 짧은 개발 주기의 반복에 의존하는 개발 프로세스

eXtream Programming(XP)란 미래에 대한 예측을 최대한 하지 않고 지속적으로 프로토타입을 완성하는 애자일 기방법론

TDD 개발과정

unit test (단위 테스트)

응용 프로그램에서 함수처럼 가장 작은 단위를 테스트

integration test (통합 테스트)

unit test가 가장 작은 부분만 따로 테스트한다면, 통합 테스트는 유닛들을 모아서 테스트 → 서버의 구성 요소들이 함께 잘 작동하는지를 테스트하기 위해

e2e(end-to-end) test

사용자의 입장에서 사용자의 상황을 처음부터 끝까지 가정하여 올바르게 작동하는지 테스트 → 예상되는 사용자의 행동과, 여러 시나리오들을 만들어 시뮬레이션함(e2e 테스트를 도와주는 프론트엔드 도구에는 대표적으로 Cypress, Selenium )


Jest In NestJS(테스트 프레임워크)

Nest.js에서는 JavaScript 테스트 프레임워크인 jest를 기본 테스트 프레임워크로 지원

Jest 파일 구조

  • beforeEach : Testing 이전에 실행되는 부분
  • describe : 여러개의 테스트 모아놓은 그룹 단위
  • test : 하나의 테스트 단위
// aaa.spec.ts

// 1. 한개 테스트하기
it('더하기 테스트', () => {
  const a = 1;
  const b = 2;

  expect(a + b).toBe(3);
});

// 2. 여러개 묶음으로 테스트하기
describe('나의 테스트 그룹', () => {
  it('더하기 테스트', () => {
    const a = 1;
    const b = 2;

    expect(a + b).toBe(3);
  });

  it('곱하기 테스트', () => {
    const a = 1;
    const b = 2;

    expect(a * b).toBe(2);
  });
});

// 3. 상품구매하기 테스트 예제
describe('상품구매테스트', () => {
  beforeEach(() => {
    // 로그인 로직 작성!!
  });

  it('돈검증하기', () => {
    const result = true; // 돈이 충분하다고 가정
    expect(result).toBe(true);
  });

  it('상품 구매하기', () => {
    const result = true;
    expect(result).toBe(true);
  });
});

Mocking

Mocking은 단위 테스트를 작성할 때 해당 코드가 의존하는 부분을 가짜(mock)으로 대체하는 기법 → 일반적으로 테스트하려는 코드가 의존하는 부분을 직접 생성하기가 너무 부담스러운 경우 mocking 사용
Mocking을 이용하면 구체적으로 구현해야 하는 실제 객체 사용보다 훨씬 빠르고, 동일한 결과를 내는 테스트를 작성 가능

NestJS는 Dependency Injection을 통해 각 Module을 캡슐화하여 서로의 의존성을 최대한 배제하고 주입하여 사용하는 특징이 있음 → NestJS의 Test 환경을 조성할 경우 의존성 주입을 하지 않고 의존성 자체를 Mocking 해야함 //
🎈Unit Test를 하기 위해 실제 코드가 실행되는 환경과 같은 환경을 조성해줘야 함

// aaa4.spec.ts

import { Test, TestingModule } from '@nestjs/testing';
import { AppController } from './app.controller';
import { AppService } from './app.service';

class MockAppService {
  getHello() {
    return 'Hello World!';
  }
}

describe('AppController', () => {
  let appController: AppController;

  beforeEach(async () => {
    const app: TestingModule = await Test.createTestingModule({
      controllers: [AppController],
      providers: [
        {
          provide: AppService,
          useClass: MockAppService, // 나만의 AppService 주입하기
        },
      ],
    }).compile();

    appController = app.get<AppController>(AppController);
  });

  describe('getHello', () => {
    it('이 테스트의 검증 결과는 Hello World를 리턴해야함!!', () => {
      expect(appController.getHello()).toBe('Hello World!');
    });
  });
});

Jest Service

Unit Test를 하기 위해 실제 코드가 실행되는 환경과 같은 환경을 조성해줘야함

3. HW

0개의 댓글