언어에 구애받지 않는 단위 테스트 프레임 워크가 있습니까? [닫은]


11

나는 항상 작업 코드를 다시 작성하는 것에 회의적이었습니다. 포팅 코드도 예외는 아닙니다. 그러나 TDD와 자동 테스트의 출현으로 코드를 다시 작성하고 리팩토링하는 것이 훨씬 합리적입니다.

오래된 코드를 이식하는 데 사용할 수있는 TDD 도구가 있는지 아는 사람이 있습니까? 이상적으로는 다음을 수행 할 수 있습니다.

  1. 오래된 코드에 대한 언어 독립적 단위 테스트를 작성하십시오 (또는 버그를 발견하면 실패합니다!).
  2. 실패한 다른 코드베이스에서 단위 테스트를 실행하십시오.
  3. 이전 코드를 보지 않고 테스트를 통과하는 새 언어로 코드를 작성하십시오.

대안은 1 단계를 "언어 1의 단위 테스트 작성"과 "포트 단위 테스트를 언어 2로 작성"으로 나누는 것인데, 이는 필요한 노력을 크게 증가시키고 이전 코드베이스의 유지 보수가 중단 될 경우 정당화하기 어렵습니다. 포트 (즉,이 코드 기반에서 지속적인 통합의 이점을 얻지 못함).

편집 : StackOverflow 에서이 질문 에 주목할 가치가 있습니다.


순수한 텍스트 명령 프로토콜을 제공 한 다음 expect테스트를 구현 하는 데 사용 하십시오.
SK-logic

@ SK-logic 나는 들어 보지 못했다 expect. stdin 및 stdout을 사용하여 파이프와 통신하는 Unix 스타일의 레거시 시스템이있는 경우 해당 도구를 사용할 수 있습니다. 실제로 어떤 스크립팅 언어로도 테스트하기가 매우 쉽습니다.
Bringer128

왜 유산인가? 유닉스 스타일의 현대적인 시스템도 가질 수 있습니다. 어쨌든, 어떤 기능에도 스크립팅 인터페이스를 제공하지 않는다는 정당한 정당성은 존재하지 않습니다.
SK-logic

@ SK-logic 명확하지 않아 죄송합니다. 포팅은 일반적으로에서 legacy language x로 수행되기 때문에 "레거시"라고 말했습니다 fancy new language y. 유닉스에 대해 아무 것도 암시하지 않았습니다!
Bringer128

어쨌든 @ Bringer123, 적절한 유닉스 지원없이 적절한 종류의 유닉스 지원없이 이런 종류의 유닉스와 같은 통합을 수행하는 나의 작은 트릭은 스크립팅 언어를 포함시키고 TCP 포트를 통해 REPL에 대한 액세스를 제공하는 것입니다. 별도의 스레드에서 실행되는 REPL). 강력한 디버깅 도구이며 테스트 자동화 엔진입니다. 그리고이 접근 방식은 문자 그대로 모든 것에서 작동합니다 (내장 된 스크립팅 언어는 매우 작을 수 있으며 제한된 리소스 시나리오에서는 포스 일 수도 있습니다).
SK-logic

답변:


6

다른 언어로 단위 테스트를 작성할 수는 없다고 생각합니다.

그러나 당신이 할 수있는 일은 매우 높은 수준이며 소프트웨어가 작성된 언어와 관련이없는 통합 / 수락 / 사용자 인터페이스 / whaterver_you_name_it 테스트를 작성하는 것입니다.

응용 프로그램이 웹 서비스 인 경우 원하는 언어로 테스트하여 프로토콜을 지원할 수 있습니다. 응용 프로그램이 브라우저에서 실행되는 경우 셀레늄을 사용할 수 있습니다 (제 생각에는 처음이지만 다른 것들이 있습니다. 작업중인 응용 프로그램 유형

물론, 많은 시간을 소비하지 않는 한 단위 레벨 테스트와 동일한 적용 범위를 갖지는 않지만 최소한 테스트 장치를 사용하게됩니다.


자동화 된 고급 테스트의 경우 +1 이것들은 분명히 생산 노력의 가치가 있습니다.
Bringer128

1
"다른 언어로 단위 테스트를 작성할 수는 없다고 생각합니다." : 카운터 예 : .NET에서 C #의 단위 테스트를 Visual Basic (또는 다른 .NET 사용 언어)으로 작성할 수 있습니다. 몇 년 전, 이것은 코드에 의한 위험을 낮추고 언어와 관련된 동일한 실수 (특히 프로그래머의 상대적 오해)를 테스트하기 때문에 Microsoft에서 모범 사례로 홍보했습니다. 합의에 따르면 포트란에서 PHP 코드를 테스트하기 위해 단위 테스트를 작성하지 않을 것입니다.
Arseni Mourzenko

2

귀하의 아이디어에 가장 가까운 것은 Java VM과 같은 가상 머신 기반 에코 시스템의 단위 테스트 프레임 워크라고 생각합니다. 적어도 Scala (그리고 Groovy도 믿습니다-Clojure에 대해 잘 모르겠습니다)는 Java와 거의 완벽하게 호환됩니다. 즉, Scala 코드는 JUnit으로 테스트 할 수 있고 Java 코드는 ScalaTest로 테스트 할 수 있습니다. 이 방법으로 Scala에서 (점진적으로 또는 한 번에) Java 코드를 다시 작성하고 동일한 이전 Java 단위 테스트를 사용하여 정확성을 확인할 수 있습니다. (또는 다른 방법으로-스칼라에서 Java로 다시 마이그레이션해야 할 정당한 이유는 상상할 수 없지만)

.NET CLI의 언어 (예 : C #, F #, ASP.NET et al.)도 마찬가지입니다.

그러나 VM / CLR 외부에서는 더 어렵습니다. 이론적으로 단위 테스트 및 / 또는 테스트중인 코드를 C와 같은 다른 언어로 컴파일 할 수는 있지만 (초기 C ++ 등의 새로운 언어와 공통적 임) 단위 테스트.


1
이것이 내 질문의 문제를 보여줍니다. 쉽게 상호 운용 할 수 있다면 왜 포트입니까? 그리고 그들이 할 수 없다면, 언어 장벽은 언어 간 단위 테스트를 불가능하게합니다.
Bringer128

@ Bringer128은 새로운 유형의 JVM 언어를지지하는 사람들이 특정 문제를 Java보다 훨씬 적은 코드로 더 빨리 해결할 수 있다고 주장합니다. 스칼라에 대한 나의 제한된 경험은 지금까지 이것을 확인합니다.
Péter Török

Groovy는 Java 와도 상호 운용됩니다.
user281377

1

이러한 프레임 워크는 사용되는 코드의 언어로 작성되어야하므로 존재하지 않습니다.

예를 들어, c ++ 코드 테스트를위한 프레임 워크는 c 또는 c ++로 작성해야합니다. c ++로 작성된 프레임 워크를 사용하면 c ++ 기능을 사용하는 경우 ac 코드를 테스트하지 않습니다.


1

방법론은 다양하지만 제 경우에는 TDD 테스트의 대부분이 '단위 테스트'와 달리 '통합 테스트'스타일을 선호합니다. 즉, 대부분의 사람들은 거의 실제 쿼리에서 전체 프로그램을 테스트하여 적절한 응답을 확인합니다.

경우에 따라 네트워크 기반 프로그램 (주로 응용 프로그램 별 프로토콜)을 작성할 때 작업하기 쉬운 전체 테스트 프레임 워크가 없었기 때문에 대부분의 테스트는 '네트워크에서'수행되었습니다. 간단히 말해서, 나는 공통적이고 간단한 테스트 프레임 워크로 다른 언어로 매우 간단한 클라이언트를 작성했으며 대부분의 테스트는 서버의 응답을 확인했습니다.

그럼에도 불구하고 이러한 경우에도 실제 응용 프로그램에 몇 가지 수동 테스트를 삽입하여 일부 비 네트워크 부분을 테스트했습니다.


0

언어에 구애받지 않는 테스트 프레임 워크는 수용 테스트 (관점)에 적합한 일반적인 테스트 프레임 워크이며 해당 프레임 워크의 테스트 케이스는 QA에 의해 관리됩니다 (예 : 로봇 프레임 워크).


2
이것은 이전의 4 가지 답변에서 제시되고 설명 된 포인트를 넘어서는 실질적인 것을 제공하지 않는 것 같습니다
gnat
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.