안녕하세요 ! 오늘은 테스트 코드의 특성에 대해 작성하려고합니다.


이것저것 툴이나 lib들만 쓰다보니 기본기가 부족한거 같아 기본서부터 다시 복습을 하고 있는데요


기본서들에 앞장에서는 매번 테스트 코드의 작성에 대해 강조 합니다.


좋은 테스트코드가 있어야 좋은 개발코드가 될수 있고 그는 품질이 높은 코드로 이어지며


품질높은 코드는 품질이 좋은 제품으로도 이어 질수 있기 때문이라고 합니다!



그로 인해서 좋은 테스트 코드에 대한 세가지의 특성을 다음과 같이 설명합니다.


반복성 


테스트 결과는 항상 재현이 가능해야 합니다. 


> 테스트가 반복적으로 실행이 됐는데 다른결과가 나올수 있다고 하면 이 테스트 방법이 과연 맞는 테스트인지 한번 고려를 해보아야 할 것 입니다.


> 또한 테스트 재현을 하는 가능성에서는  네트워크 부하 또는 CPU 부하등의 외부 요인과의 독립적인 테스트 인것이 보장이 되어야 합니다. 


간결성 


테스트는 테스트를 하는 것에만 집중해야 합니다.


> 테스트 코드의 의도 목적을  흐트리지않아야 합니다. 가능한한 많은 HTML 마크업, CSS, 자바스크립트를 제거 하여야 합니다. 많이 제거 될시 테스트 대상이 아닌 코드가 케이스에 영향을 줄 확률이 낮아집니다.


독립성 


각 테스트는 독립적으로 동작이 가능하여야 합니다.


> 현재 실행되는 테스트 가 다른 결과에 의해 변동이되면 안되어야 합니다.  첫번째 내용과 비슷할 수 있지만 현재 작성되는 테스트가 다른 결과에 의존성을 가지게 된다면 버그의 원인을 찾기가 쉽지 않습니다.



이후에는 테스트 프레임워크를 선택하거나 제작하여서 사용하게 되는데 그에 따른


자바스크립트의 Unit 테스트 프레임워크에서 요구되는 기능을 나열하자면


1. 브라우저 의 행동을 할수 있다.

2. 테스트 일시 정지(pause)와 시작(start)가 가능하여야 한다.

3. 비동기 테스트에 대한 setTimeout 

4. 실행되어야 하는 테스트들에 대한 필터링 



이에 해당하는 대표적인 프레임워크


1. Selenium

> E2E테스트에 최적화된 프레임워크 현존하는 테스트프레임워크 중 사견으로는 제일 좋은 솔루션

- 크로스 브라우징 테스트 가능 (ie,firefox,chrome,edge,safari,opera)

- 실제사람이 움직이는 시뮬레이션 가능

- DOM 조작 스크립트 전부 사용 가능(브라우저 Injection 기능을 통함)

- 다양한 언어 지원 (js,JAVA,C#,Ruby,Python)

- 이외에도 더 다양한 기능들 지원 

2. JsUnit


3. YUI Test

> 야후! 에서 개발하고 구축한 테스팅 프레임워크

- 확장가능, 광범위한 단위 테스트 가능

- 비동기 테스트 지원

- 뛰어난 이벤트 시뮬레이션 가능 (http://developer.yahoo.com/yui/3/test/)


4. QUnit

>    jQuery 를 테스트하기 위한 UnitTest Framework 현재는 그이상을 넘어 간결한 솔루션으로 진화

- 가볍고 간결한 API

- 비동기 테스트 지원

- no jQuery 테스트 가능

- Regression Test 에 매우 적합 

> 관련 정보는 http://qunitjs.com


5. FireUnit


6. Screw.Unit


7. JsSpec


8. Dojo


9. Prototype


10. Envjs


11. Jasmine & karma 


12. puppeteer

> 구글에 있는 Chrome 개발팀이 Chrome 테스트를 위해 만드는 프레임워크 

-  매주 패치가 될정도로 활발하게 이루워지는 상태

-  스크립샷 캡처 이미지 비교 등 할수있는 기능들의 매우 많음

- 단점으로는 Chrome에서만 가능 (user-agent를 변경해서 타 브라우저로 뜨게는 가능)

13. mocha & assert


등등이 있습니다.  


위의 프레임워크들이 전부 4가지를 지원하는 것은 아니지만 점유율에 따라 리스트업을 하게 되면 위와같이 나타납니다.


물론 위 말고도 더 많은 테스트프레임워크들이 있습니다. 다 써본건 아니지만 저는 Selenium 을 위주로 사용중입니다.



+ Recent posts