2012-12-02 5 views
1

테스트에서 중복을 피하기 위해 Shoulda와 context를 사용하려고합니다. 다음 테스트에서 나는 다음과 같은 출력을 기대합니다.동일한 테스트를 두 번 실행해야하는 이유

"dir created" 
"dir removed" 

대신 나는

"dir created" 
"dir removed" 
."dir created" 
. 
Finished tests in 0.001907s, 1048.7677 tests/s, 1048.7677 assertions/s. 
2 tests, 2 assertions, 0 failures, 0 errors, 0 skips 

첫 번째 테스트를 두 번 실행되는 이유를 이해가 안있어?

이 내 테스트 코드입니다 :

class FileDirTest < Test::Unit::TestCase 
context "FileDir:" do 

setup do 
    @fd = FileDir.new 
    @myDir = "dir1" 
end 

context "When dir is create:" do 
    setup do 
    @fd.create_dir(@myDir) 
    p "dir created" 
    end 
    should "be Dir1" do 
    assert_equal true, Dir.exist?(@myDir) 
    end 
    context "When delete a dir" do 
    setup do 
     @fd.remove_dir(@myDir) 
     p "dir removed" 
    end 
    should "be removed" do 
     assert_equal false, Dir.exist?(@myDir) 
    end 
    end 
end 

끝 끝 설정이 모든 테스트 전에 실행되는 모든 테스트 프레임 워크에

+0

테스트가 목록에 나타나기 전에 실행되지 않습니다. 그들은 내부 테스트에서 외부 테스트로 실행됩니다. "설정" 다음 는 "설정" –

답변

2

처럼. 하나의 컨텍스트가 다른 컨텍스트에 중첩되어 있으므로 "dir created"이 두 번 표시됩니다.

+0

좋아 "생성 된 디렉토리는"그 말이 "디렉토리가 제거"하지만에 대한 테스트를 실행하는 동안 "디렉토리를 제거 왜 이해가 안 "창조 DIR " "는 삭제되었다는 것을 알리는 확인을 표시 한 다음 첫 번째 테스트를 다시 실행하여 새 디렉토리를 만듭니다. 전체 테스트가 끝나면 dir 폴더를 볼 수 있습니다. 그것은 거기에 있으면 안됩니다 –

+0

당신이 말하는대로 나는 그것을 보여야한다 : "dir created"-> 첫 번째 테스트. 두 번째 테스트에서는 을 표시하고 "dir created"다음에 "dir removed" –

+0

테스트를 수행해야합니다. 순서 테스트는 시간 결합으로 인해 부서지기 쉽습니다. 중요한 순서는 setup -> run test -> teardown입니다. 그래서 당신이 필요하다고 생각하는 것은 디렉토리가 있다면 그 디렉토리를 지우는 것입니다. – Todd