일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | 5 | ||
6 | 7 | 8 | 9 | 10 | 11 | 12 |
13 | 14 | 15 | 16 | 17 | 18 | 19 |
20 | 21 | 22 | 23 | 24 | 25 | 26 |
27 | 28 | 29 | 30 |
- 삽질기
- activerecord
- RoR
- transaction
- programmingTip
- carrierwave
- Linux
- apache spark
- Ruby
- programming
- fileUploader
- Rails
- Migration
- minitest
- Hadoop
- test
- form
- mysql
- share
- Scala
- rubyonrails
- java
- 전화영어
- max중첩
- fixture
- TIP
- 점심영어스터디
- Ruby on Rails
- Shell
- uploader
- Today
- Total
아침바라기의 이야기
[Rails] Minitest를 이용한 모델 테스트 팁 본문
mini 테스트는 Fixture를 사용한다.
즉 DB를 이용해서 테스트를 하는데 test case마다 한번 전체 테이블의 데이터를 지우고 Fixture를 한번 로딩하는 반복을 이용한다.
mini test에서는 test case 마다 transaction의 begin, rollback 을 사용한다.
대부분 DB(MS SQL 빼고)에서 중첩 transaction을 지원하지 않으므로 테스트 케이스 테스트 중에 오류가 발생할 수 있다.
트랜잭션이 걸려 있는 경우,
1. transaction을 스킵하는 기능을 만듬
2. AOP를 적용
3. transaction을 사용하지 않는다.
4. helper class를 통해서 테스트 범위 밖으로 밀어버린다.
위의 4가지 방법을 이용해서 트랜잭션 중첩을 회피 해야한다.
fixture 를 DB로 로딩 하는것으로 인해 테스트 시간이 길다.
제대로 된 테스트는 하겠지만, 빠른 템포의 개발자는 피로감을 느낄 정도다.
Fixture가 싫다면, DB를 안거치고 객체를만들어주는 FactoryGirl을 쓰자
참고 자료에도 나오지만 논쟁거리다. 근데 어차피 fixture 자체가 Mocking 인데...그게 그거 아닌가 싶기도하고...-_-;
fixture yml에 id를 지정안하면 mini test가 알아서 id를 만들어버린다.
대신 유니크는 보장한다. 이 때문에 auto increment id 를 의미있게 사용하는 경우엔 id를 직접 지정해야한다.
fixture yml에 null로 설정하면 빈값(nil)이 들어간다
빈칸을 주거나 해도 빈값이 들어간다
참고
'개발이야기 > Ruby on Rails' 카테고리의 다른 글
[Ruby] Fixture 작성 방법 (0) | 2015.10.27 |
---|---|
Active Record Scope 정리 (0) | 2015.10.24 |
[Rails] 트랜잭션 사용법 (0) | 2015.10.21 |
Carrierwave Uploder로 동적 이미지 version 생성법 (0) | 2015.10.07 |
[ROR][공유] Rails idoms (0) | 2015.10.05 |