2012-02-02 3 views
4

setup 또는 teardown에서 수행해야 할 값 비싼 작업이 모든 테스트에서 동일하며 테스트 실행 중에 결과가 엉망이되지 않는다고 가정하십시오. 모든 단일 테스트 전후에 실행되도록하는 것이 나에게 적절하지 않은 것 같습니다.루비의 Test :: Unit :: TestCase에서 모든 테스트에 대한 공통 설정 및 티아 다운 로직을 정의하는 방법?

첫 번째 테스트가 실행되기 전에 그리고 마지막 테스트가 실행 된 후에 만 ​​setup/teardown 코드를 실행하는 것이 더 좋습니다.

편집 : 앤드류

class TestFTPExtensions < Test::Unit::TestCase 
    def setup 
    # Setup connection 
    @ftp = Net::FTP.new 'localhost', 'anonymous' 
    @ftp.passive = true 

    # Create remote test directory 
    @ftp.mkdir 'dir' 

    # Create remote test file 
    path = File.join Dir.tmpdir, 'file' 
    File.open path, 'w' do |f| 
     @ftp.put f 
    end 
    File.delete path 
    end 

    def teardown 
    @ftp.rmdir 'dir' 
    @ftp.delete 'file' 
    @ftp.close 
    end 

    # imagine some tests here that don't change/remove any remote objects 

end 
+0

설치 코드의 기능에 따라 다릅니다. 데이터베이스에 물건을 추가하면, 조명기/공장이가는 길입니다. 적어도 하나의 예는 당신이 취하는 조치에 대해보다 구체적으로 설명해야합니다. 테스트가 실제 범위 밖에서 (예 : 외부 API에 대한 연결 설정) 수행하고있을 가능성도 있으며, 비슷한 경우에는 모의 객체, 스텁 등을 사용하여 테스트해야합니다. 그건 당신이 실제로 테스트하고있는 바깥에 있습니다. – jefflunt

+0

@normalocity 특정 시나리오에 대한 정보를 추가했습니다. 그럼에도 불구하고 일반적인 설정과 같은 것이 훨씬 더 편리 할 수있는 여러 가지 시나리오를 상상할 수 있습니다. 조명기, 공장, mock 및 스텁에 관해서 :이 주제에 대한 링크가있어서 도움이 될 것입니다. ^^ – raphinesse

+0

나는이 질문이 이전에 제기 된 것 같아요. "testunit"이라는 질문을 검색하여 찾을 수 있습니다. –

답변

4

감사 : 나는 이렇게 인터넷 :: FTP 일부 확장을 테스트해야합니다 작업하고있어 특별한 경우는 FTP 연결을 설정하고 테스트를 위해 일부 원격 객체를 설정 이 here on stackoverflow에 대한 답변을 찾았습니다.

그러나 답변을 찾으려고 할 때 1.9.x 지점에서 표준 테스트 프레임 워크가 MiniTest로 전환되었음을 알았습니다. 그래서 실제로 테스트를 위해 사용하고 있습니다. This answer은 MiniTest로 어떻게 달성하는지 설명합니다.