Äú¿ÉÒÔ¾èÖú£¬Ö§³ÖÎÒÃǵĹ«ÒæÊÂÒµ¡£

1Ôª 10Ôª 50Ôª





ÈÏÖ¤Â룺  ÑéÖ¤Âë,¿´²»Çå³þ?Çëµã»÷Ë¢ÐÂÑéÖ¤Âë ±ØÌî



  ÇóÖª ÎÄÕ ÎÄ¿â Lib ÊÓƵ iPerson ¿Î³Ì ÈÏÖ¤ ×Éѯ ¹¤¾ß ½²×ù Modeler   Code  
»áÔ±   
 
   
 
 
     
   
 ¶©ÔÄ
  ¾èÖú
VC2010+TFS2010½áºÏBoost.Test¿â½øÐÐ×Ô¶¯»¯²âÊÔ
 
×÷Õߣºsunrise918µÄ²©¿Í À´Ô´£ºCSDN ·¢²¼ÓÚ£º 2014-12-30
  3745  次浏览      18
 

×î½ü×öÁËÒ»¸öʵÑ飬½áºÏ VC2010 + TFS2010 + Boost.Test ½¨Á¢×Ô¶¯»¯¹¹½¨ºÍ×Ô¶¯»¯²âÊÔ¡£ÊµÑé³É¹¦ÊµÏÖÁËÄ¿±ê¡£ÏÂÃæ¼òÊöÒ»ÏÂÕû¸ö¹ý³Ì¡£
Ç°ÌáÊÇÒѾ­½¨Á¢ÁË TFS2010 ¹¹½¨ÏµÍ³£¬VC2010 ÒѾ­ÉèÖúÃÒýÈë Boost ¿âµÄÅäÖá£

Ê×ÏÈ£¬ÐèÒª½¨Á¢²âÊÔµÄÄ¿±êÄ£¿é£¨TDDSample.Library£©¡¢ C++ ²âÊÔÏîÄ¿£¨TDDSample.Test£©ºÍÓà Boost.Test ¿â¹¹½¨µÄ²âÊÔ³ÌÐò£¨TDDSample£©£º

1¡¢Ð½¨ÏîÄ¿£¬ÏîÄ¿Ãû³Æ£ºTDDSample£¬½â¾ö·½°¸Ãû³Æ£ºTDDSample£¬Ñ¡Ôñ¡°Visual C++¡±Ïµġ°Win32¡±ÏµÄ"Win32 ¿ØÖÆ̨ӦÓóÌÐò"£¬ÆäËûĬÈϼ´¿É¡£ÈçÏÂͼ£º

2¡¢ÔÚ½â¾ö·½°¸ TDDSample ÏÂн¨ÏîÄ¿£¬ÏîÄ¿Ãû³Æ£ºTDDSample.Library£¬Ñ¡Ôñ¡°Visual C++¡±Ïµġ°Win32¡±ÏµÄ"Win32 ÏîÄ¿"£¬Ñ¡Ôñ¡°¾²Ì¬¿â¡±£¬ÆäËûĬÈϼ´¿É¡£ÈçÏÂͼ£º

3¡¢ÔÚ½â¾ö·½°¸ TDDSample ÏÂн¨ÏîÄ¿£¬ÏîÄ¿Ãû³Æ£ºTDDSample.Test£¬Ñ¡Ôñ¡°Visual C++¡±Ïµġ°²âÊÔ¡±ÏµÄ"²âÊÔÏîÄ¿"£¬ÆäËûĬÈϼ´¿É¡£

4¡¢°ÑÏîÄ¿ TDDSample.Test ϵÄÎļþ UnitTest1.cpp ÖØÃüÃûΪ TargetTest.cpp£¬Àà UnitTest1 ÖØÃüÃûΪ TargetTest ¡£ÈçÏÂͼ£º

5¡¢ÉèÖÃÏîÄ¿ÒÀÀµÏîÈçÏ£ºTDDSample.Test ÒÀÀµ TDDSample ºÍ TDDSample.Library£¬TDDSample ÒÀÀµ TDDSample.Library¡£ÈçÏÂͼ£º

6¡¢±àÒë³É¹¦²¢Ç©Èë TFS2010 ÖС£

È»ºó£¬½¨Á¢²âÊÔÄ¿±ê´úÂ룺

1¡¢ÔÚÏîÄ¿ TDDSample.Library ÏÂн¨À࣬ÀàÃû£ºTarget£¬Ñ¡Ôñ¡°Visual C++¡±Ïµġ°C++¡±ÏµÄ"C++ Àà"£¬Ñ¡Ôñ¡°ÄÚÁª¡±£¬ÆäËûĬÈϼ´¿É¡£ÈçÏÂͼ£º

2¡¢ÔÚÎļþ Target.h ÖУ¬°Ñ´úÂë¸ÄΪÈçÏ£º

#pragma once  
#ifndef _TARGET_H_  
#define _TARGET_H_  
  
namespace Sunrise { namespace TDDSample { namespace Library  
{  
  
template  
T Add(T const& a, T const& b)  
{  
    return a + b;  
}  
  
template  
class Target  
{  
public:  
    Target(void)  
    {  
    }  
  
    ~Target(void)  
    {  
    }  
  
    T Add(T const& a, T const& b)  
    {  
        return Library::Add(a, b);  
    }  
};  
  
}}} // namespace Sunrise::TDDSample::Library  
  
#endif  

È»ºó£¬½¨Á¢ Boost.Test ²âÊÔÏîÄ¿µÄ²âÊÔ´úÂ룺

1¡¢ÔÚÏîÄ¿ TDDSample ϵÄÎļþ TDDSample.cpp ÖУ¬°Ñ´úÂë¸ÄΪÈçÏ£º

// TDDSample.cpp : ¶¨Òå¿ØÖÆ̨ӦÓóÌÐòµÄÈë¿Úµã¡£  
//  
  
#include "stdafx.h"  
  
#include   
  
#define BOOST_TEST_MAIN  
#include   
  
namespace Sunrise { namespace TDDSample  
{  
using namespace std;  
  
struct GlobalFixture  
{  
    GlobalFixture()  
    {  
        cout << "¿ªÊ¼²âÊÔ..." << endl;  
    }  
  
    ~GlobalFixture()  
    {  
        cout << "²âÊÔ½áÊø£¡" << endl;  
        //system("pause");  
    }  
};  
  
BOOST_GLOBAL_FIXTURE(GlobalFixture)  
  
}}  // namespace Sunrise::TDDSample

2¡¢ÔÚÏîÄ¿ TDDSample ÏÂн¨Îļþ£¬ÎļþÃû£ºTargetTest.cpp£¬Ñ¡Ôñ¡°Visual C++¡±Ïµġ°´úÂ롱ϵÄ"C++ Îļþ(.cpp)"¡£´úÂëÈçÏ£º

#include "StdAfx.h"  
  
#include   
  
#define BOOST_TEST_INCLUDED  
#include   
#include   
  
#include "../TDDSample.Library/Target.h"  
  
namespace Sunrise { namespace TDDSample  
{  
using namespace std;  
using namespace boost;  
//using namespace boost::unit_test;  
using namespace Sunrise::TDDSample::Library;  
  
struct TargetFixture  
{  
    TargetFixture()  
    {  
        cout << "Target ¿ªÊ¼²âÊÔ..." << endl;  
    }  
  
    ~TargetFixture()  
    {  
        cout << "Target ²âÊÔ½áÊø£¡" << endl;  
    }  
};  
  
BOOST_FIXTURE_TEST_SUITE(s_Target, TargetFixture)  
  
    BOOST_AUTO_TEST_CASE(t_GlobalAdd)  
{  
    BOOST_CHECK_EQUAL(3, Add(1, 2));  
}  
  
BOOST_AUTO_TEST_CASE(t_ErrorAdd)  
{  
    // Ä£Äâ´íÎó  
    //BOOST_CHECK_EQUAL(0, Add(1, 2));  
}  
typedef mpl::list <short, int, long, double> Types;  
BOOST_AUTO_TEST_CASE_TEMPLATE(t_TargetAdd, T, Types)  
{  
    Target target;  
    BOOST_CHECK_EQUAL(static_cast(3.0), target.Add(1, 2));  
}  
  
BOOST_AUTO_TEST_SUITE_END()  
  
}}  // namespace Sunrise::TDDSample

3¡¢ÉèÖÃÏîÄ¿ TDDSample ÊôÐÔ£¬Ê×ÏÈÑ¡Ôñ¡°ËùÓÐÅäÖá±£¬È»ºóÑ¡Ôñ¡°ÅäÖÃÊôÐÔ¡±Ïµġ°C/C++¡±Ïµġ°´úÂëÉú³É¡±Ïµġ°ÆôÓà C++ Òì³£¡±Ïµġ°ÊÇ£¬µ«ÓÐ SEH Òì³£ (/EHa)¡±¡£ÈçÏÂͼ£º

4¡¢¼ÌÐøÉèÖÃÊôÐÔ£¬Ñ¡Ôñ¡°ÅäÖÃÊôÐÔ¡±Ïµġ°Éú³Éʼþ"ϵġ°ºóÆÚÉú³Éʼþ¡±Ïµġ°ÃüÁîÐС±£¬ÊäÈëÈçÏÂÃüÁîÐУº

"$(TargetPath)" --result_code=no --report_level=no  

¸Ã²½Öè¿ÉÒÔʹ Boost.Test ÏîÄ¿±àÒëºóÁ¢¼´Ö´ÐвâÊÔ£¬²¢¿ÉÒÔÔÚÊä³öÖÐÏÔʾ²âÊÔ½á¹û£¬²¢ÇÒ¿ÉÒÔÀûÓà Visual Studio IDE ¶¨Î»µ½³ö´íµÄµØ·½¡£ÈçÏÂͼ£º

5¡¢È·¶¨Í˳öÉèÖÃÊôÐÔ£¬ÒÔÓ¦ÓÃÉÏÃæ 3¡¢4 ²½µÄÉèÖá£

6¡¢±àÒë³É¹¦²¢Ç©Èë TFS2010 ÖС£

È»ºó£¬½¨Á¢ C++ ²âÊÔÏîÄ¿µÄ²âÊÔ´úÂ룺

1¡¢ÔÚÏîÄ¿ TDDSample.Test ϵÄÎļþ TargetTest.cpp ÖеÄÈçÏ´úÂ룺

[TestMethod]  
void TestMethod1()
{
//
// TODO: ÔÚ´Ë´¦Ìí¼Ó²âÊÔÂß¼­
//
};

¸ÄΪ£º

[TestMethod]  
void TestGlobalAdd()
{
Assert::AreEqual(3, Add(1, 2));
};

[TestMethod]
void TestError()
{
// Ä£Äâ´íÎó
//Assert::AreEqual(0, Add(1, 2));
};

[TestMethod]
void TestTargetAdd()
{
Target<double> target;
Assert::AreEqual(3.0, target.Add(1, 2));
};

[TestMethod]
void BoostTest()
{
// µ÷Óà Boost.Test ÏîÄ¿£¬²¢¼ì²é·µ»ØÖµ£¬·Ç 0 ֵΪʧ°Ü
// ²âÊÔ´úÂë¼È¿ÉÒÔÔÚ C++ ²âÊÔÏîÄ¿Öбàд£¬Ò²¿ÉÒÔÔÚ Boost.Test ÏîÄ¿Öбàд
// ͬʱ¿ÉÒÔ½áºÏ TFS µÄ×Ô¶¯»¯²âÊÔ

String^ currentPath = AppDomain::CurrentDomain->BaseDirectory;
String^ fileName = currentPath + "\\TDDSample.exe";

ProcessStartInfo^ testProcessStartInfo = gcnew ProcessStartInfo(fileName);
testProcessStartInfo->UseShellExecute = false;
testProcessStartInfo->RedirectStandardOutput = true;
Process^ testProcess = Process::Start(testProcessStartInfo);
StreamReader^ testStreamReader = testProcess->StandardOutput;
testProcess->WaitForExit();

Console::Write(testStreamReader->ReadToEnd());
Assert::AreEqual(0, testProcess->ExitCode);
};

Ìí¼ÓÈçÏ #include ¼° using ´úÂ룺

#include "../TDDSample.Library/Target.h"  
using namespace System::IO;
using namespace System::Diagnostics;
using namespace Sunrise::TDDSample::Library;

2¡¢ÉèÖÃÏîÄ¿ TDDSample.Test ÊôÐÔ£¬Ê×ÏÈÑ¡Ôñ¡°ËùÓÐÅäÖá±£¬È»ºóÑ¡Ôñ¡°ÅäÖÃÊôÐÔ¡±Ïµġ°³£¹æ¡±Ïµġ°¹«¹²ÓïÑÔÔËÐÐʱ֧³Ö¡±Ïµġ°¹«¹²ÓïÑÔÔËÐÐʱ֧³Ö(/clr)¡±¡£ÈçÏÂͼ£º

3¡¢±àÒë³É¹¦²¢Ö´ÐвâÊÔ£¬Ñ¡Ôñ²Ëµ¥"²âÊÔ"ϵġ°ÔËÐС±Ïµġ°½â¾ö·½°¸ÖеÄËùÓвâÊÔ¡±£¬²âÊÔÈ«²¿Í¨¹ý¡£ÈçÏÂͼ£º

È»ºó£¬½¨Á¢×Ô¶¯¹¹½¨ºÍ×Ô¶¯²âÊÔ£º

1¡¢Ê×ÏÈÐèÒªÆô¶¯¡±Team Foundation Éú³É֪ͨ¡°£¬Ñ¡Ôñ¡±¿ªÊ¼¡°²Ëµ¥Ïµġ±ËùÓгÌÐò¡°Ïµġ±Microsoft Visual Studio 2010¡°Ïµġ±Team Foundation Server Tools¡°Ïµġ±Éú³É֪ͨ¡°¡£ÈçÏÂͼ£º

2¡¢Ñ¡Ôñ²Ëµ¥"ÊÓͼ"ϵġ°ÍŶÓ×ÊÔ´¹ÜÀíÆ÷¡±£¬Ñ¡ÔñÍŶÓÏîĿϵġ°Éú³É¡±£¬²¢µã»÷ÓÒ¼ü£¬Ñ¡Ôñ¡±Ð½¨Éú³É¶¨Òå¡°£¬Ä¬ÈÏÉú³É¶¨ÒåÃû³Æ£ºTDDSample¡£ÈçÏÂͼ£º

3¡¢Ñ¡Ôñ¡±´¥·¢Æ÷¡°Ïµġ±·â±ÕÇ©Èë - ½öÔڳɹ¦ºÏ²¢ºÍÉú³ÉËùÌá½»µÄ±ä¸üºó½ÓÊÜÇ©Èë¡°¡£ÈçÏÂͼ£º

4¡¢Ñ¡Ôñ¡±¹¤×÷Çø¡°Ïµġ±Ô´´úÂë¹ÜÀíÎļþ¼Ð¡°£¬ÉèÖÃΪ½â¾ö·½°¸µÄ¸ùĿ¼£¬ÀàËÆ¡±$/Sample/TDDSample¡°¡£ÈçÏÂͼ£º

5¡¢Ñ¡Ôñ¡±Éú³ÉĬÈÏÖµ¡°£¬ÉèÖá±½«Éú³ÉÊä³ö¸´ÖƵ½ÒÔÏ·ÅÖÃÎļþ¼Ð¡°Îª TFS ·þÎñÆ÷ÅäÖõÄÊä³ö·¾¶£¬ÀàËÆ¡±\\TFSServer\PublishProgram\Sample¡°¡£ÈçÏÂͼ£º

6¡¢¡±¹ý³Ì¡°ºÍ¡±±£Áô²ßÂÔ¡°¿ÉÒÔ±£³ÖĬÈÏÉèÖá£

7¡¢±£´æÉèÖ㬲¢Ç©ÈëÈ«²¿´úÂë±ä¸ü¡£´Ëʱ½«ÏÔʾ¡±·â±ÕÇ©Èë¡°¶Ô»°¿ò£¬µã»÷¡±Éú³É¸ü¸Ä¡°¼´¿É¡£ÈçÏÂͼ£º

8¡¢¹ýÒ»¶Îʱ¼äºó£¬¡±Éú³É֪ͨ¡°»áÊÕµ½ TFS ·þÎñÆ÷·µ»ØµÄÉú³É¼°²âÊÔ½á¹û²¢ÏÔʾ¡±·â±ÕÇ©Èë¡°½á¹û¶Ô»°¿ò£¬µã»÷¡±Ð­µ÷¡°¼´¿É¡£ÈçÏÂͼ£º

×îºó£¬Èç¹ûÒª²âÊÔʧ°ÜµÄÇ©È룬¿ÉÒÔÐ޸ĴúÂëÖбê¼Ç¡±Ä£Äâ´íÎó¡°´¦µÄ´úÂ룬ÆôÓÃ×¢Ê͵ôµÄ´úÂë¼´¿É¡£

   
3745 ´Îä¯ÀÀ       18
Ïà¹ØÎÄÕÂ

΢·þÎñ²âÊÔÖ®µ¥Ôª²âÊÔ
һƪͼÎÄ´øÄãÁ˽â°×ºÐ²âÊÔÓÃÀýÉè¼Æ·½·¨
È«ÃæµÄÖÊÁ¿±£ÕÏÌåϵ֮»Ø¹é²âÊÔ²ßÂÔ
È˹¤ÖÇÄÜ×Ô¶¯»¯²âÊÔ̽Ë÷
Ïà¹ØÎĵµ

×Ô¶¯»¯½Ó¿Ú²âÊÔʵ¼ù֮·
jenkins³ÖÐø¼¯³É²âÊÔ
ÐÔÄܲâÊÔÕï¶Ï·ÖÎöÓëÓÅ»¯
ÐÔÄܲâÊÔʵÀý
Ïà¹Ø¿Î³Ì

³ÖÐø¼¯³É²âÊÔ×î¼Ñʵ¼ù
×Ô¶¯»¯²âÊÔÌåϵ½¨ÉèÓë×î¼Ñʵ¼ù
²âÊԼܹ¹µÄ¹¹½¨ÓëÓ¦ÓÃʵ¼ù
DevOpsʱ´úµÄ²âÊÔ¼¼ÊõÓë×î¼Ñʵ¼ù
×îпγ̼ƻ®
ÐÅÏ¢¼Ü¹¹½¨Ä££¨»ùÓÚUML+EA£©3-21[±±¾©]
Èí¼þ¼Ü¹¹Éè¼Æʦ 3-21[±±¾©]
ͼÊý¾Ý¿âÓë֪ʶͼÆ× 3-25[±±¾©]
ÒµÎñ¼Ü¹¹Éè¼Æ 4-11[±±¾©]
SysMLºÍEAϵͳÉè¼ÆÓ뽨ģ 4-22[±±¾©]
DoDAF¹æ·¶¡¢Ä£ÐÍÓëʵÀý 5-23[±±¾©]

LoadRunnerÐÔÄܲâÊÔ»ù´¡
Èí¼þ²âÊÔ½á¹û·ÖÎöºÍÖÊÁ¿±¨¸æ
ÃæÏò¶ÔÏóÈí¼þ²âÊÔ¼¼ÊõÑо¿
Éè¼Æ²âÊÔÓÃÀýµÄËÄÌõÔ­Ôò
¹¦ÄܲâÊÔÖйÊÕÏÄ£Ð͵Ľ¨Á¢
ÐÔÄܲâÊÔ×ÛÊö


ÐÔÄܲâÊÔ·½·¨Óë¼¼Êõ
²âÊÔ¹ý³ÌÓëÍŶӹÜÀí
LoadRunner½øÐÐÐÔÄܲâÊÔ
WEBÓ¦ÓõÄÈí¼þ²âÊÔ
ÊÖ»úÈí¼þ²âÊÔ
°×ºÐ²âÊÔ·½·¨Óë¼¼Êõ


ij²©²ÊÐÐÒµ Êý¾Ý¿â×Ô¶¯»¯²âÊÔ
IT·þÎñÉÌ Web°²È«²âÊÔ
IT·þÎñÉÌ ×Ô¶¯»¯²âÊÔ¿ò¼Ü
º£º½¹É·Ý µ¥Ôª²âÊÔ¡¢Öع¹
²âÊÔÐèÇó·ÖÎöÓë²âÊÔÓÃÀý·ÖÎö
»¥ÁªÍøweb²âÊÔ·½·¨Óëʵ¼ù
»ùÓÚSeleniumµÄWeb×Ô¶¯»¯²âÊÔ