프로그래밍/(도서)C#코딩의기술-실전

[C#] 코딩의기술(실전편) - 2.14 테스트와 목(mock)

Victory_HA 2022. 3. 31. 22:31

Mock

  • 단위 테스트를 작성할 때 실제 클래스를 호출하기가 어려울 때가 있습니다.
    • ex> 호출에 의해 특정 리소스가 변경되거나, 호출 시 불러오는 값이 고정되지 않은 경우.
  • 이때는 고정값을 반환하는 객체인 목(mock)을 사용해서 테스트하는 것이 수월합니다.

Mock의 특징

  • 목 객체를 활용한 테스트는 직접 개발자가 목 객체를 만들어야 합니다.
  • 목을 사용하면 코딩의 양도 늘고, 실행 시간도 늘어나서 목에 의존하지 않는 메서드를 설계해야합니다.
  • 목을 사용해야만 테스트가 가능한 메서드가 있습니다.
  • 이미 만들어져 있는 목 프레임워크를 활용하여 쉽게 목 객체 활용이 가능합니다.
  • 해당 라이브러리만 세팅하면 쉽게 목 객체를 활용 가능합니다.
  • 테스트 가능한 코드를 설계하면서 코드의 품질을 향상시키는 데 도움이 됩니다.

Mock 라이브러리

  • NMock
  • Moq
  • Microsoft Fakes
  • 이외 다수

단위 테스트하기 쉬운 코드

  • 바로 값을 반환하므로 단위 테스트가 쉽게 가능합니다.
private static int CalcPrice_easy (int count, int price)
{
    return count + price;
}

단위 테스트하기 어려운 코드

  • 사용자 입력이 필요한 메서드이므로 단위 테스트하기 어렵습니다.
private static int CalcPrice_hard (int price)
{
    var s = Console.ReadLine();
    int count;
    int.TryParse(s, out count);
    return count + price;
}