2011-11-20 3 views
12

일반적으로 Java에서는 동일한 패키지 계층 구조로 두 개의 소스 폴더 srctest을 생성합니다.Ruby 테스트 폴더 구조를 구성하는 가장 좋은 방법은 무엇입니까?

루비에서는 모든 테스트를 테스트 할 클래스와 동일한 폴더에 넣기 만합니까? 아니면 별도의 폴더에 비슷한 계층 구조를 생성합니까? 그렇다면 단위 테스트에서 require 경로를 어떻게 관리합니까?

+1

@nash : 내가 읽은 첫 번째 의견은 무례한 것으로 나타났습니다. –

+2

죄송합니다. 정말 무례했습니다. 나는 그것을 알아 내기 위해 노력할 것이다. 예를 들어 rspec spec 폴더를 볼 수 있습니다 (https://github.com/rspec/rspec-core/tree/master/spec).이 사람들은 실제로 스펙을 작성하는 방법을 알고 있습니다. 다시 미안 해요. –

답변

8

처음에는 각 젬이 전형적인 레이아웃을 가지고 있습니다. 코드는 거의 lib입니다. 루트 디렉토리에는 README와 같은 메타 데이터, gemspec 파일 및 일부 선택적 구성 데이터 만 있습니다. Rails 나 Sinatra와 같은 웹 응용 프로그램을 작성하는 경우 해당 레이아웃 표준이 대신 사용됩니다.

모든 프로젝트 유형에서 유사한 위치에서 테스트를 찾을 수 있습니다. 사용하는 테스트 프레임 워크에 따라 다른 표준이 있습니다.

Test::Unit을 사용하는 경우 테스트는 test 디렉토리에 있습니다. 해당 디렉토리에서 실제로 테스트 파일을 구성하는 방법에 대한 실제 표준은 없습니다. 필자는 개인적으로 테스트 된 코드의 파일 레이아웃을 적어도 부분적으로 미러링하는 것이 유용하다는 것을 알았습니다. 모듈/네임 스페이스를 아낌없이 사용하면 오히려 쉽게 읽을 수 있습니다.

RSpec을 사용하는 경우 테스트 (사양이라고 함)는 spec 디렉토리로 이동합니다. 실제 테스트 레이아웃에 관한 위의 노트도 여기에 적용됩니다.

결국 결국 테스트를 설정하는 것은 개발자의 결정입니다. 테스트는 사람들이 서로 다른 (그리고 문자열) 의견을 가진 영역이기 때문에 성공에 대한 거룩한 길은 없습니다. 당신은 당신이 사용하는 보석들과 그들이하는 일들을보아야합니다. Test :: Unit 레이아웃의 예제는 Rails gems에서 찾을 수 있습니다. ActiveRecord입니다. RSpec 테스트의 예는 ChiliProject 용 chiliproject_backlogs 플러그인입니다.

+0

철저한 답변 주셔서 감사합니다! 나는 종종 rspec 프로젝트에서 의존성을 포함하고있는'spec_helper'가 있음을 주목합니다. –

+0

젬은'\ lib'과'\ test' 디렉토리를 가질 것입니다. – ashes999

0

저는 Ruby를 처음 접했고 같은 질문에 대해 궁금합니다. 내가 얻지 못한 부분은 계층 적으로 조직화하여 lib 디렉토리에있는 잠재적으로 계층 적으로 구성된 구성 요소와 일치시키는 방법이었습니다. 그런 다음이를 모두 스위트로 실행했습니다.

나는 오랫동안 인터넷 검색을 해본 적이 없지만 내 발견은 이미 예상보다 얇은 편입니다.

# 파일 : 다른 테스트 케이스를 필요로 루비 파일입니다 테스트 스위트에 함께 수집 할 수

테스트 케이스 클래스 : 내가 찾은 가장 도움이되는 것은 ruby wiki에서이입니다 ts_allTheTests.rb
는 '시험/부'
필요한 필요할 'testOne'
가 'testTwo'
요구 'testThree'이와

관련 테스트 케이스를 필요 자연스럽게 그룹화 할 수 있습니다. 또한 테스트 스위트에는 다른 테스트 스위트가 포함될 수 있으므로 테스트 계층을 구성 할 수 있습니다.

이전에, 나는 내 테스트 디렉토리에서 하위 디렉토리를 피하고 내 Rakefile이 같은 일을하고 있었다, 또는 실제로 테스트를 실행하는 모든 루비 파일 : 그래서

$LOAD_PATH << File.dirname(__FILE__) 
require 'test/unit' 
Dir.glob('test/test_*', &method(:require)) 

나는 두 기술을 결합하는 경우 , 나는 그 디렉토리로부터 동적으로 테스트를 요구하는 각 디렉토리를위한 파일을 가질 것이고, 그 디렉토리는 그 파일이 부모 디렉토리에 대해 요구할 것이다. 그러나 이것은 지루함을 피하기위한 나의 원래 노력을 무력화시키는 것으로 보인다.

그러면 someclassesruby-doc이며 관련 문서는 적합하다고 보았습니다. 그러나 쉽게 누락 될 수있는 Test::Unit에 대한 더 많은 정보가 상향 된 것처럼 보입니다. 아직 모든 것을 읽지는 못했지만 유망 해 보입니다.