내가 테스트 프레임 워크에서와 사용 가능한 설정하는 방법을 알아내는 데 문제가 비주얼 스튜디오 2008 를 위해 C++
내장 된 단위 테스트 스위트 아마도.
모든 링크 또는 자습서를 주시면 감사하겠습니다.
내가 테스트 프레임 워크에서와 사용 가능한 설정하는 방법을 알아내는 데 문제가 비주얼 스튜디오 2008 를 위해 C++
내장 된 단위 테스트 스위트 아마도.
모든 링크 또는 자습서를 주시면 감사하겠습니다.
답변:
이 페이지 는 도움 이 될 수 있으며, 몇 가지 C ++ 단위 테스트 프레임 워크를 검토합니다.
CPPUnitLite 또는 CPPUnitLite2를 확인하십시오 .
CPPUnitLite 는 원래 Java의 JUnit을 CPPUnit으로 C ++로 포팅 한 Michael Feathers에 의해 만들어졌습니다 (CPPUnit는 JUnit의 개발 모델을 모방하려고 시도하지만 C ++에는 사용하기 쉽도록 Java의 기능 (예 : 리플렉션)이 없습니다).
CPPUnitLite는 C ++로 포팅 된 Java가 아닌 진정한 C ++ 스타일의 테스트 프레임 워크를 만들려고합니다. (나는 Feather 's Working Effectively with Legacy Code 책 에서 의역했습니다 .) CPPUnitLite2 는 더 많은 기능과 버그 수정이있는 또 다른 재 작성 인 것 같습니다.
또한 CPPUnitLite2 및 기타 프레임 워크의 내용을 포함하는 UnitTest ++ 를 우연히 발견했습니다 .
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에서도 작동해야 함).
다음은 예입니다.
// 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 () 네이티브 함수를 선언하면됩니다. 매크로도, 트릭도없고, 전진합니다.
이제 heade 파일은 선택 사항이지만 C ++ 네이티브 서명 (예 : Stirng ^ 대신 wchar_t *)을 사용하여 Assert 클래스의 메서드를 노출하는 데 사용할 수 있으므로 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
개인적으로 WinUnit을 선호하는 이유는 테스트를 제외하고는 아무것도 작성할 필요가 없기 때문입니다 (exe가 아닌 .dll을 테스트로 빌드합니다). 프로젝트를 빌드하고 WinUnit.exe를 테스트 출력 디렉토리로 지정하면 찾은 모든 것을 실행합니다. 여기에서 WinUnit 프로젝트를 다운로드 할 수 있습니다 . (MSDN은 이제 기사가 아닌 전체 문제를 다운로드해야합니다. WinUnit이 포함되어 있습니다.)
VS9에 포함 된 프레임 워크 는 .NET이지만 C ++ / CLI로 테스트를 작성할 수 있으므로 일부 .NET isms를 배우는 데 익숙하다면 대부분의 C ++ 코드를 테스트 할 수 있어야합니다.
boost.test 및 googletest 모습은 매우 유사하지만 약간 다른 용도에 적합합니다. 둘 다 바이너리 구성 요소가 있으므로 테스트를 컴파일하고 실행하려면 솔루션에 추가 프로젝트가 필요합니다.
우리가 사용하는 프레임 워크 는 훨씬 더 가벼운 CxxTest입니다 . 헤더 만 있으며 Perl (!) 스크립트를 사용하여 헤더에서 테스트 스위트 정보를 긁어냅니다 (스위트는 CxxTest :: Base에서 상속되며 모든 테스트 메소드의 이름은 "test"로 시작 함). 분명히이를 위해서는 한 소스 또는 다른 소스 에서 Perl을 가져와야하므로 빌드 환경 설정에 오버 헤드가 추가됩니다.
UnitTest ++ 사용 합니다.
이 게시물을 작성한 후 몇 년 동안 소스는 SourceForge에서 github로 이동했습니다. 또한 예제 자습서 는 이제 더 독립적입니다. 구성이나 프로젝트 설정에 전혀 들어 가지 않습니다.
프로젝트 파일이 이제 CMake를 통해 생성되므로 Visual Studio 6에서 여전히 작동하지 않을 것입니다. 여전히 이전 버전 지원이 필요한 경우 SourceForge 브랜치 에서 사용 가능한 마지막 버전을 얻을 수 있습니다 .
여기에 언급 된 도구는 모두 명령 줄 도구입니다. 더 통합 된 솔루션을 찾고 있다면 C / C ++ 단위 테스트를위한 Visual Studio 추가 기능인 cfix studio를 살펴보세요 . TestDriven.Net과 매우 유사하지만 .NET이 아닌 (관리되지 않는) C / C ++ 용입니다.
VS2008에 대해 100 % 확신하지는 못하지만 Microsoft가 VS2005에서 Team Suite의 일부로 제공 한 단위 테스트 프레임 워크는 C ++가 아닌 .NET 전용이라는 것을 알고 있습니다.
CppUnit도 사용했는데 괜찮 았습니다. NUnit / JUnit / so on과 매우 동일합니다.
부스트를 사용한 경우 단위 테스트 라이브러리도 있습니다.
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 ++ 애플리케이션 단위 테스트에 대한 단계별 지침으로 극복하고 게시물을 작성했습니다. 도움이되기를 바랍니다.