2012-07-21 3 views
1

SUnit, JUnit 및 일반적인 xUnit 테스트 프레임 워크 이후로 테스트가 먼 길을 온 것처럼 보입니다.테스트 프레임 워크의 '스타일'은 무엇입니까?

내가 '동작 중심'테스트가 무엇인지 생각해 내기 위해 RSpecCucumber을 조사했지만, 이제는 단위 테스트 작성에 대한 어떤 접근 방식이 존재하는지 궁금합니다.

특정 언어와 관련이 없지만 테스트 코드에 대한 일반적인 아이디어와 접근 방식에 더 관심이 있습니다.

제 궁금한 점은 단위 테스트, 즉 "주장"과 다른 접근 방식이 양식 적으로 다른 접근 방식이라는 것입니다.

단위 testting의 xUnit의 스타일이 당신의 즐겨 찾기 언어로 다음과 같이 대략 같습니다 :

것은 나를 예를 들어 보겠습니다

stack = new Stack() 
assertTrue (stack.empty()) 

stack.push(1) 
assertFalse (stack.empty()) 
assertEquals(1, stack.top()) 

RSpec에 스타일의 단위 testting은 다음과 같이 오히려 외모를 (약 즉석) :

describe Stack do 

    it "should be empty" do 
    Stack.new.empty?.should == true 
    end 

    it "should contain new value on top" do 
    stack = Stack.new 
    stack.push(1) 
    stack.empty?.should == false 
    stack.top().should == 1 
    end 
end 

다른 흥미로운 스타일 인 'DSL'이 있습니까? 물론, 모든 언어와 프레임 워크에는 테마가 다양하지만 일반적인 '테마'/ 스타일이 다릅니 까?

+0

는 내가 완전히 제대로 질문을 이해 여부를 모르겠어요. NUnit과 같은 단위 테스트 프레임 워크가 있으며, Visual Studio 및 기타 여러 가지 기본 제공 프레임 워크가 있습니다. 이것들은 상태 기반 테스팅에 사용될 수 있습니다. 행동 기반 테스트를 사용하려면 Rhino Mocks, MOQ, TypeMock 등과 같은 고립 (모의) 프레임 워크 중 하나를 사용해야 할 수도 있습니다 ... 또한 여러 구성 요소를 함께 테스트하기위한 통합 테스트를 수행 할 수 있습니다. 자동화 된 UI 테스트는 예를 들어, 웹 서비스 테스트 용 soapUI (통합 테스트로 보았을지라도). – Gorgsenegger

+0

나는 질문을 확장하려했다. 그것이 더 명확하게되기를 바랍니다. – smarr

+1

질문에 맞는 것은 확실치 않지만 devs가'//Given','// When' 및'// Then' 주석을 jUnit 테스트에 넣어서 전제 조건, 테스트 된 이벤트, 예상되는 결과. –

답변

0

개인적으로 나는 Given, When, Then 유형 구문 테스트를 정말 좋아합니다.

Given some particular situaion 
When some action occurs 
Then there will be an outcome that can be verified. 

는 정말 깔끔 .NET에 StoryQSpecFlow 같은 도구를 사용하여이 방법으로 시작. 나는 내 자신의 개인 스타일에 더 적합한 내 자신의 little framework을 작성하기 시작했으나 아직 성숙하지는 않았다.

1

두 가지 스타일의 테스트 만 생각할 수 있습니다. 코드 위주 (xUnit 및 RSpec 위 코드에서) 및 동작 중심 (오이, SpecFlow - 주어진/Then/When). 이제 코드 중심 프레임 워크 (코드 # 1)에서 비헤이비어 스타일 테스트를 수행 할 수 있습니다. 종속성의 대부분은 (엄격) 조롱 -

  • 이 모의 객체 주의자 :

    는 또한 테스트의 세 가지 유형이있다.

  • 스태빌리스트 - 대부분의 종속성이 스텁됩니다.
  • 통합 - 대부분의 종속성은 실제입니다.

코드 # 1 :

@Test 
public void theScenarioDescription() { 
    givenThatSomething(); 
    whenIWiggleIt(); 
    thenSomethingHasHappened(); 
} 
관련 문제