-
현재 내가 맡은 프로그램은
WPF
를 이용해 구현되었는데, 기존 소스는 굉장히 UI와 Model간 의존도가 컸다. 무슨 말이냐 하면 단순히 버튼 하나를 새로 만드는 과정에도 수많은 절차의 과정이 여기저기 묶여있어, 확장하기 굉장히 어려웠다. 그래서 UI와 Model 코드 의존성을 줄여나가는 과정이 필요했다. 여기에 도움이 됐던게 단위 테스트였다. Visual Studio에선 단위 테스트 기능을 잘 제공해주기 때문에, 어렵지 않게 작성할 수 있었는데, 단위 테스트를 사용함으로서 코드를 분리해 나갈 수 있게 됐다.TDD(Test-Driven Development)
코드를 의식의 흐름대로 짜다보면, 난 A 함수가 잘 동작하는지만 테스트 해보고 싶지만 해당 테스트를 위해선 애플리케이션을 구동해서 로그인 절차를 걸치고 ~~여러가지 작업을 거친 뒤에만 A 함수가 잘 작동하는지 확인할 수 있게 된다.
TDD는 간단하게 개발 주체가 Test위주가 되는 그런 기법이다.A 함수를 테스트 하고 싶으면 기능 테스트를 위해서 함수를 구조적으로 분리되도록 작성한 뒤에, 테스트를 거치며 코드간 의존성을 낮추는 위주로 개발을 하게 된다. 말 그대로 Test가 갑이 되어 Test의 입장에서 개발을 하는 개발 기법인 것이다.
이는 UI 뒷단의 기능을 테스트 할 땐 용이했지만, UI에 대해선 단위 테스트 적용이 힘들어 UI는 직접 애플리케이션을 켜가며 테스트 해야 했다.
이런 테스트를 진행할 때, 선행되어야 하는 과정들은
Mock Object
(모조품)으로 채우면 테스트를 거치기 용이했다.간단한 단위 테스트 만들기
아주 간단한 테스트를 보여주기위해 WPF 프로그램을 작성했다.
(Visual Studio 2017 기준)
보잘것없지만.. 버튼클릭하는 프로그램이 있다. 버튼을 클릭시 인자로 해당 버튼의 Content를 int로 변환후 출력하는 프로그램이다.
public void Click(object parameter) { string input = parameter as string; int convertedInput = Convert.ToInt32(input); Console.WriteLine($"{convertedInput} Started"); }
살펴보면 parameter라는 인자가 들어오는데, parameter를 입맛대로 바꿔 테스트해보싶은거다.
이제 단위테스트를 만드는데, 매우 간단하다.
해당 메소드를 우클릭하면 단위 테스트 만들기라고 뜬다.!
확인하다보면, 프로젝트 생성이 되고 테스트 메소드가 만들어진다.
이제 할 것은, 여러개의 인자로 내가 만든 기능이 잘 작동하는지 테스트하는 것이다.
짠, DataRow를 사용하면 테스트코드에 인자를 넣을 수 있다.
Exception이 나면, 해당 테스트는 실패한다.
이제 테스트 실행을 시켜보면,,
짠, 총 9번의 테스트 중, 6번 성공 3번 실패했다.
이렇게 테스트 목적으로 코드를 작성하다 보면, 기능별로 깔끔하게 작성하려고 노력하기 때문에 코드간 의존성이 줄어든다.
반응형'잡기술' 카테고리의 다른 글
싱글톤(Singleton) 패턴 (0) 2021.02.20 개발 협업 도구 (0) 2020.11.26