문제

내장된 단위 테스트 도구 모음을 사용하여 C++용 Visual Studio 2008에서 테스트 프레임워크를 설정하고 사용할 수 있는 방법을 찾는 데 어려움을 겪고 있습니다.

모든 링크나 튜토리얼을 알려주시면 감사하겠습니다.

도움이 되었습니까?

해결책

이 페이지 도움이 될 수 있으며, 몇 가지 C++ 단위 테스트 프레임워크를 검토합니다.

  • Cpp단위
  • 부스트.테스트
  • CppUnitLite
  • NanoCpp단위
  • 단위++
  • Cxx테스트

확인해 보세요 CPPUnitLite 또는 CPPUnitLite2.

CPPUnitLite 원래 Java의 JUnit을 CPPUnit으로 C++로 포팅한 Michael Feathers가 만들었습니다(CPPUnit은 JUnit의 개발 모델을 모방하려고 시도하지만 C++에는 Java의 기능이 부족합니다[예:반영]을 사용하기 쉽게 만듭니다).

CPPUnitLite는 C++로 포팅된 Java 프레임워크가 아닌 진정한 C++ 스타일 테스트 프레임워크를 만들려고 시도합니다.(Feather's의 말을 의역한 것입니다. 레거시 코드를 효과적으로 사용하기 책). CPPUnitLite2 더 많은 기능과 버그 수정이 포함된 또 다른 재작성인 것 같습니다.

나도 방금 우연히 봤어 유닛테스트++ 여기에는 CPPUnitLite2 및 기타 프레임워크의 내용이 포함됩니다.

마이크로소프트가 출시한 윈유닛.

결제도 가능 잡다 또는 Doctest

다른 팁

Visual Studio 2008 내에 내장된 테스트 프레임워크를 사용하여 관리되지 않는 C++를 테스트하는 방법이 있습니다..C++/CLI를 사용하여 C++ 테스트 프로젝트를 만드는 경우 관리되지 않는 DLL을 호출할 수 있습니다.관리되지 않는 C++로 작성된 코드를 테스트하려면 공용 언어 런타임 지원을 /clr:safe에서 /clr로 전환해야 합니다.

내 블로그에 단계별 세부정보가 있습니다. http://msujaws.wordpress.com/2009/05/06/unit-testing-mfc-with-mstest/

다음은 Microsoft에서 IIS URL 재작성 모듈을 테스트하는 데 사용하는 접근 방식입니다(명령줄 기반이지만 VS에서도 작동해야 함).

  1. 소스 코드를 cpp 파일로 이동하고 필요한 경우 전방 선언을 사용하여 헤더 파일을 사용할 수 있는지 확인하세요.
  2. 코드를 컴파일하여 라이브러리(.lib)로 테스트하세요.
  3. CLR을 지원하는 C++로 UnitTest 프로젝트를 만듭니다.
  4. 헤더 파일을 포함하십시오.
  5. .lib 파일을 포함합니다.
  6. Microsoft.VisualStudio.QualityTools.UnitTestFramework.dll에 대한 참조를 추가합니다.
  7. 단위 테스트를 선언하기 위해 매우 작은 클래스를 사용하고 다음과 같이 관리되는 C++/네이티브 코드로 이동합니다(오타가 있을 수 있음).

예는 다음과 같습니다.

// Example
#include "stdafx.h"
#include "mstest.h"

// Following code is native code.
#pragma unmanaged
void AddTwoNumbersTest() {
  // Arrange
  Adder yourNativeObject;
  int expected = 3;
  int actual;
  // Act
  actual = yourNativeObject.Add(1, 2);
  // Assert
  Assert::AreEqual(expected, actual, L"1 + 2 != 3");
}

// Following code is C++/CLI (Managed)
#pragma managed
using namespace Microsoft::VisualStudio::TestTools::UnitTesting;
[TestClass]
public ref class TestShim {
public:
  [TestMethod]
  void AddTwoNumbersTest() {
     // Just jump to C++ native code (above)
     ::AddTwoNumbersTest();
  }
};

이 접근 방식을 사용하면 사람들은 C++/CLI에 대해 너무 많이 배울 필요가 없으며 모든 실제 테스트는 C++ 네이티브로 수행되며 TestShim 클래스는 테스트를 MSTest.exe에 '게시'하는 데 사용됩니다(또는 표시되도록 설정). ).

새 테스트를 추가하려면 새 [TestMethod] void NewTest(){::NewTest();} 메서드와 새 void NewTest() 네이티브 함수를 선언하면 됩니다.매크로도 없고, 트릭도 없고, 간단합니다.

이제 헤드 파일은 선택 사항이지만 C++ 기본 서명을 사용하여 Assert 클래스의 메서드를 노출하는 데 사용할 수 있습니다(예:Stirng^ 대신 wchar_t*)를 사용하면 C++에 가깝고 C++/CLI에서는 멀리 유지할 수 있습니다.

예는 다음과 같습니다.

// Example
#pragma once
#pragma managed(push, on)
using namespace System;
class Assert {
public:
    static void AreEqual(int expected, int actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    static void AreEqual(int expected, int actual, PCWSTR pszMessage) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual, gcnew String(pszMe
ssage));
    }

    template<typename T>
    static void AreEqual(T expected, T actual) {
        Microsoft::VisualStudio::TestTools::UnitTesting::Assert::AreEqual(expected, actual);
    }

    // Etcetera, other overloads...
}
#pragma managed(pop)

HTH

개인적으로 나는 선호한다 윈유닛 내가 그럴 필요는 없으니까 내 테스트 빼고는 뭐든 써봐 (저는 exe가 아닌 .dll을 테스트로 빌드합니다.)프로젝트를 빌드하고 WinUnit.exe를 테스트 출력 디렉터리로 지정하면 찾은 모든 항목이 실행됩니다.당신은 할 수 있습니다 여기에서 WinUnit 프로젝트를 다운로드하세요..(MSDN에서는 이제 기사가 아닌 전체 호를 다운로드해야 합니다.WinUnit이 포함되어 있습니다.)

VS9에 포함된 프레임워크 ~이다 .NET이지만 C++/CLI로 테스트를 작성할 수 있으므로 일부 .NET 개념을 편안하게 배울 수 있다면 대부분의 C++ 코드를 테스트할 수 있습니다.

부스트.테스트그리고 구글테스트상당히 비슷해 보이지만 약간 다른 용도로 적용되었습니다.두 가지 모두 바이너리 구성 요소를 포함하므로 테스트를 컴파일하고 실행하려면 솔루션에 추가 프로젝트가 필요합니다.

우리가 사용하는 프레임워크는 Cxx테스트, 훨씬 더 가볍습니다.이는 헤더일 뿐이며 Perl(!) 스크립트를 사용하여 헤더에서 테스트 스위트 정보를 긁어냅니다(스위트는 CxxTest::Base에서 상속되며 모든 테스트 메소드 이름은 "test"로 시작합니다).분명히, 이를 위해서는 Perl을 다음에서 구해야 합니다. 하나의 소스 또는 또 다른, 이는 빌드 환경 설정에 오버헤드를 추가합니다.

나는 사용한다 유닛테스트++.

이 게시물을 작성한 후 몇 년 동안 소스는 SourceForge에서 github로 이동되었습니다.또한 예제 튜토리얼 이제 더 불가지론적입니다. 구성이나 프로젝트 설정에 전혀 들어가지 않습니다.

프로젝트 파일이 이제 CMake를 통해 생성되므로 Visual Studio 6에서 계속 작동할지는 의문입니다.여전히 이전 버전 지원이 필요한 경우 다음에서 사용 가능한 마지막 버전을 얻을 수 있습니다. 소스포지 나뭇가지.

여기에 언급된 도구는 모두 명령줄 도구입니다.보다 통합된 솔루션을 찾고 있다면 다음을 살펴보십시오. 씨픽스 스튜디오, C/C++ 단위 테스트용 Visual Studio 추가 기능입니다.TestDriven.Net과 매우 유사하지만 .NET이 아닌 (관리되지 않는) C/C++용입니다.

나는 사용했다 Cpp단위 VS2005 및 Eclipse를 사용합니다.위키는 매우 철저합니다(특히 JUnit에 익숙하다면).

VS2008에 대해 100% 확신할 수는 없지만 Microsoft가 Team Suite의 일부로 VS2005에 제공한 단위 테스트 프레임워크는 C++가 아닌 .NET 전용이라는 것을 알고 있습니다.

저도 CppUnit을 사용해봤는데 괜찮았습니다.NUnit/JUnit/등과 거의 동일합니다.

부스트를 사용해 본 적이 있다면, 단위 테스트 라이브러리도 있습니다

부스트 뒤에 있는 사람들은 몇 가지를 가지고 있습니다. 심각한 코딩 작업이 필요하므로 해당 프레임워크는 꽤 훌륭해야 하지만 가장 사용자 친화적이지 않을 수도 있습니다. :-)

나는 같은 이유로 CxxTest도 좋아합니다.헤더 파일이므로 링크가 필요하지 않습니다.Python 러너도 있으므로 Perl을 사용하지 않아도 됩니다.조만간 구글 라이브러리를 리뷰하겠습니다.Boost는 다른 수하물을 너무 많이 끌어옵니다.

내가 아는 한 Visual Studio 2008용 단위 테스터는 .NET 코드에만 사용할 수 있습니다.

저는 Visual Studio 2005에서 CppUnit을 사용해 보았는데 꽤 괜찮았습니다.

내가 기억하는 한, 설정은 상대적으로 고통스럽지 않았습니다.테스트 프로젝트에서 링커(링커 → 입력 → 추가 종속성)에 cppunitd.lib가 포함되어 있는지 확인하세요.

그 다음에, #include <cppunit/extensions/HelperMacros.h> 헤더에.

그런 다음 다음 단계를 수행할 수 있습니다. http://cppunit.sourceforge.net/doc/1.11.6/cppunit_cookbook.html 테스트 수업이 제대로 진행되도록 하세요.

Visual Studio를 사용하는 Windows 환경에서 관리되지 않는 C++ 응용 프로그램에 대한 단위 테스트를 구현하는 데 어려움을 겪었습니다.그래서 나는 관리되지 않는 C++ 응용 프로그램 단위 테스트에 대한 단계별 지침을 극복하고 게시물을 작성했습니다.나는 그것이 당신을 도울 수 있기를 바랍니다.

Visual Studio의 관리되지 않는 C++에 대한 단위 테스트

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top