U E D R , A S I H C RSS

NUnit/C++예제


1. 예제 소스 실행법 (Using C++)

  • 먼저 프로ì �트를 Managed C++ í�´ëž˜ìФ ë�¼ì�´ë¸ŒëŸ¬ë¦¬ë¡œ 만든다.
  • Test Fixture ë�  í�´ëž˜ìФì�˜ 앞ì—�는 TestFixture, 테스트 함수 앞ì—� Test ì�¸ Attribute 를 ë¶™ì�¸ë‹¤.
  • ì†�성 페ì�´ì§€ 가서 C/C++로 간다ì�Œ, #using 참조확ì�¸ì—�다가 NUnitì�´ 깔린 í�´ë�”ì�˜ bin í�´ë�”를 넣어준다.
  • 컴파ì�¼í›„ 지정ë�œ dll 파ì�¼ì�´ ìƒ�긴다.
  • NUnitì�´ 깔린 í�´ë�”ì�˜ bin안ì—� ë³´ë©´ NUnit-gui.exeì�„ 실행한다. 컴파ì�¼í•´ì„œ 나온 dllì�„ 로딩해주고 run하면 테스트들ì�„ 실행해준다.

  • 예제는 아무 ìƒ�ê°�ì—†ì�´ 만들었고, 테스트 í•  í•„ìš”ë�„ 없는 거지만.. 그냥 사용법ì�„ 보는 거니까 신경쓰지 마세요.

// NUnit6.h
#pragma once

#using <nunit.framework.dll>
using namespace System;
using namespace NUnit::Framework;

namespace NUnitSamples
{
	[TestFixture]
	public __gc class Calculator
	{
		int a, b;
	public:
		[SetUp] void Init();
		[Test] void Add();
		[Test] void Sub();
		[Test] void Mul();
		[Test] void Div();
	};
}
// NUnit6.cpp
#include "stdafx.h"
#include "NUnit6.h"

namespace NUnitSamples {
	void Calculator::Init() {
		a = 5;
		b = 7;
	}
	void Calculator::Add() {
		Assertion::AssertEquals(12, a+b);
	}
	void Calculator::Sub() {
		Assertion::AssertEquals(-2, a-b);
	}
	void Calculator::Mul() {
		Assertion::AssertEquals(35, a*b);
	}
	void Calculator::Div() {
		Assertion::AssertEquals(1.4, a/b);
	}
}

2. 사족

  • í—¤ë�”ì—�다 다 구현해ë�„ ë�œë‹¤. 하지만 ê°™ì�€ ì�´ë¦„ì�˜ cpp파ì�¼ì�„ 만들어줘야 하는것같다. 안그러면 Test없다고 안ë�œë‹¤.
  • namespace 귀찮으면 안만들어ë�„ ë�œë‹¤.
  • ê°„ê²° 버젼

// NUnit6.h
#pragma once

#using <nunit.framework.dll>
using namespace System;
using namespace NUnit::Framework;

[TestFixture]
public __gc class Calculator
{
	int a, b;
public:
	[SetUp]
	void Calculator::Init() {
		a = 5;
		b = 7;
	}
	[Test]
	void Calculator::Add() {
		Assertion::AssertEquals(12, a+b);
	}
	[Test]
	void Calculator::Sub() {
		Assertion::AssertEquals(-2, a-b);
	}
	[Test]
	void Calculator::Mul() {
		Assertion::AssertEquals(35, a*b);
	}
	[Test]
	void Calculator::Div() {
		Assertion::AssertEquals(1.4, a/b);
	}
};
// NUnit6.cpp
#include "stdafx.h"
#include "NUnit6.h"

3. MFC�서 사용하기

VC++ 7.0� MFC�서 NUnit� �보�. �것보다 좋� 방법� 있�듯한�... �수군� �방법밖�는 만들어내지 못했다.
  1. �단 MFC 프로�트를 만든다. �것� 메�프로�트�고 하�.
  2. 전체 솔루션� Managed C++ Library 프로�트를 새로 추가한다. �것� 테스트프로�트�고 하�.
  3. 테스트 프로�트� �성으로 들어가서 #using 참조� nunit\bin��를 넣어준다.
  4. 테스트 프로�트� �성으로 들어가서 �함 디렉토리� 위� 메�프로�트� ��를 넣어주�.
  5. 메�프로�트� �성탭� 가서 Managed C++ Extension� 체�해준다.
�단 준비는 �다. 시작해 보�.

메�프로�트�서 만든 새 �래스를 테스트 프로�트�서 테스트하고 싶다. 어떻게 해야할까? 순진한 �수군� #include <domain.h> �렇게 하고, 테스트 �래스� .h랑 .cpp 참조 넣어주면 �줄 알았다. �것땜� 어제밤부터 삽질했다. �렇게만 하면 안�고... 새로 만든 �래스를 �단 보�.
#pragma once

class CDomain
{
public:
	CDomain(void);
	~CDomain(void);
	int add(int a, int b);
	int mult(int a, int b);
};
�소대로 하�면 �렇게 하면 �것�다. 하지만 현재 프로�트는 Managed C++ Extensions�다. �것� C++� �용해서 .Net� Platform위�서 프로그래�� 하기 위하여 Microsoft�서 C++� 확장한 형태� 문법� 제안� 추가 문법� 정�해 놓았다. �를 �용해야 NUnit� C++ 코드� 접근할수 있다. �경우 NUnit �서 검�할 �래스� 접근하기 위해 다�과 같� �래스 앞� __gc 를 붙여서 선언해야 한다.
#pragma once

public __gc class CDomain
{
public:
	CDomain(void);
	~CDomain(void);
	int add(int a, int b);
	int mult(int a, int b);
};
__gc� 가 부여하는 능력과 제약 사항� 대해서는 __gc � 참고하�. NUnit ��서 테스트� 대� �래스는 무조건 ��터형으로 접근할수 있다. �제 테스트 �래스� 내용� 보�.
// TestCase.h

#pragma once

#using <nunit.framework.dll>

using namespace System;
using namespace NUnit::Framework;

#include "Domain.h" // �함 디렉토리� 메�프로�트� ��를 넣어놨으므로 가능

namespace TestCase
{
	[TestFixture]
	public __gc class Class1
	{
	private:
		CDomain* m_pD; // Only Pointer
	public:
		[SetUp]
		void init() {
			m_pD = new CDomain; // delete 필요없다.
		}
		[Test]
		void testAdd() {
			Assertion::AssertEquals(7, m_pD->add(3,4));
		}
		[Test]
		void testMult() {
			Assertion::AssertEquals(12, m_pD->mult(3,4));
		}
	};
}
�렇게 해주면 �다. �거 알아내�� 엄청 삽질했다. 그런 �미로... NUnit 많� 애용해 달�. 혹시나 � 간단하고 좋� 방법 있으면 올려 주세요.

� 경우 Unmanaged C++ 코드� 대해서 �용할수 없다. 즉, MFC로 완성� 프로그램���, .Net Platform � 없는 곳�서는 작�할 수 없다. (로�� __gc 가 존재하므로)

류�민� NUnit 과 Unmanged C++� 연결� 완전하게는 하지 못했다. Managed C++프로�트와 Unmanged C++ 프로�트 �개를 만들어 Managed C++ 코드�서 NUnit � �용해 Unmanaged C++ � 접근해 테스트 코드를 작성했다. 하지만, .Net Platform� 미숙과, Managed C++ Extension� 몰�해, 프로�트 관리와 �존성 문제� 봉착해 곧 벽� 부딪쳤다. � 둘� 혼용할수 없�� 알았다.

Unmanaged C++�서 가장 좋왔� 방법� Unmanaged C++ Project �개를 만들어서, 한쪽으로 �존시킨후 assert 를 �용해 �체�� Test Framework � 작성해서 사용하는 방법�었다.
--NeoCoin

아.. gc를 쓰면 닷넷 플랫�없는 곳�서는 쓸 수가 없겠네요. 그러면 �방법� 어떤가요? �단 테스트할때는 테스트할 �래스� __gc를 붙�잖아요? 나중� 배�할때는 __gc를 없애는 �니다. 물론 Managed C++ Extensions� 문법� 쓰면 안�겠죠.(gc빼고) 매�로를 잘 쓰면 어떻게 �거 같기� 한�... --�수

현재는 Managed C++� 깊히 공부해 보지 않아서, 잘 모르겠다. �것� __gc를 붙였다 때었다 하는 문제�지 확신할수가 없다.

그것� 떠나서, MFC를 쓰면서 테스트를 하는 것� �미 있어 지려면, MFC 로 작성한 프로그램� 정� �작하면서, 테스트를 할수 있어야 하는�, MFC Frameworks � Managed C++ 모드로 컴파�� 잘�고, 잘 �아가는지, �것� �문�다. �다면, MS�서 모든 MFC class앞� __gc가 붙�기�� 한걸까? 혹� �미 해당 매�로가 존재하지 않�까?

그래서 MFC 예제는 네가 작성한 첫번째 예제와 ��한 수준으로 쓸수 있는 것� 아�까 ��한다. 길� 열어줘 :)
--NeoCoin



Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:23:50
Processing time 0.0071 sec