구아바 단위 테스트는 어떻게 자동으로 생성 되었습니까?


31

구아바에는 단위 테스트 사례가 자동으로 생성됩니다 .

구아바는 엄청나게 많은 단위 테스트를 수행합니다. 2012 년 7 월 현재 구아바 테스트 패키지에는 286,000 개 이상의 개별 테스트 사례가 포함되어 있습니다. 이 중 대부분은 손으로 작성하지 않고 자동으로 생성되지만 Guava의 테스트 범위는 특히 com.google.common.collect에 대해 매우 철저합니다.

그것들은 어떻게 생성 되었습니까? 어떤 기술과 기술을 사용하여 설계하고 생성 했습니까?


이 주제에 닿은 Google 친구의 이야기를 본 기억이 있습니다. 그래도 그 이름에 대한 단서는 없지만, 그 연설은 제가 생각하는 자바 컨벤션
Zavior

3
package com.google.common.collect.testing 에는 이름에 "Generator"가 포함 된 많은 클래스가 있으므로 테스트 생성을위한 프레임 워크처럼 보입니다. 테스트를 위해 "골격"또는 "기본 클래스"로 문서화 된 클래스가있는 하위 패키지도 있습니다.
gnat

1
@gnat 예, 어딘가에서 본 것이 확실했습니다. 예를 들어 com.google.common.collect.testing.features 는 컬렉션 클래스가 충족해야하는 tfeatures / constrains를 보여 주며 테스트 사례는 이들의 조합입니다. 이 방법은 그들이 할 수 변수화 테스트
dzieciou


이 질문은 커뮤니티에서 많은 관심을 받았지만 지금까지 합리적인 대답은 없었으므로 Martin의 제안을 따르고 여기에 sqa.stackexchange.com/questions/5214/…을 넣었습니다 .
dzieciou

답변:


8

이 대량 테스트의 대부분은 구아바 컬렉션 구현을위한 것입니다. 그들은 컬렉션 인터페이스를 철저히 테스트하는 일반 테스트를 작성했으며 이는 구현마다 스위트를 생성합니다. 예를 들어,라는 클래스를 참조하십시오 CollectionAddAllTester, ListIndexOfTester.

이것은 모두 Guava의 일부로 제공되는 testlib라는 라이브러리에 의해 뒷받침됩니다. 이것은 매우 일반적인 것입니다. 컬렉션뿐만 아니라 모든 인터페이스에 대한 일반 테스트 작성을 지원합니다. Feature가능한 구현을 지정 하고 테스트 할 수 있습니다 (예 : 세트를 수정할 수없는 경우와 다른 결과를 기대할 수 있음 set.add()). 테스트를 실행할 때 구현이 지원하는 기능을 지정합니다.

4가 아닌 JUnit 3을 기반으로합니다. 일반적으로 클래스 TestCase라는 이름의 메소드로 확장되는 클래스가 testSomething()있으며 JUnit 은이를 반사적으로 실행합니다. testlib 라이브러리는 이러한 테스트를 실행하여 수명주기를 다음과 같이 표시합니다.

  • 테스트하려는 각 구현에 대해
  • 각 (적용 가능한) 테스트 방법
  • TestCase인스턴스 만들기
  • 초기화 TestSubjectGenerator– 이것은 실제로 테스트 주제를 작성하는 곳까지 확장하는 testlib 인터페이스입니다.
  • 테스트 방법을 신중하게 실행하십시오. 이 방법 중에는 getSubjectGenerator()시험 대상에게 접근 할 수 있습니다

키 비트는 특정 테스트 주제를 일반 테스트 케이스에 주입 할 수있는 추가 초기화 단계입니다.

나는 글 쓴 자신의 인터페이스에 대한 testlib 생성 스위트를 작성하는 방법을.

(또한 sqa 사이트 에 동일한 질문에 게시되었습니다 .)


6

단위 테스트 생성기가 있습니다. 예를 들어, .NET 세계에서 Microsoft Pex와 같은 것이 이것을 할 수 있습니다.

예를 들어, Microsoft Pex는 코드 분석을 기반으로 가능한 모든 값을 메소드의 인수로 시도합니다. 일부 인수는 메소드에서 예외를 발생시킬 것으로 예상됩니다. 이러한 것들이 자동으로 생성 된 테스트를 수행 할 수 있습니다. 특정 경우에 리턴되는 빈 문자열과 같은 정적 값도 자동으로 테스트 할 수 있습니다.


2
이는 음의 경로 테스트 (예외, 잘못된 입력, 충돌, 시간 초과)에만 유용한 무작위 테스트입니다. 나는 그들이 행복한 길을 위해 테스트를 생성했다고 믿습니다. 정적 분석 도구를 시작하는 것뿐만 아니라 더 많은 디자인이 필요합니다.
dzieciou

그리고 행복한 길을 위해 테스트를 생성하는 방법과 도구가 있다는 것을 알고 있지만 (예 :이 답변 참조 ) 구아바의 특별한 경우에 이것이 어떻게 수행되었는지에 관심이 있습니다
dzieciou
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.