2009-11-22 38 views
1

我試圖得到一些單元測試原生C++和Visual Studio測試套件運行。我只有一個名爲「Shape」的簡單類。我跟着一個教程,做了以下步驟:的Visual C++團隊測試問題

  • 創造了一個「引用類」包裝被稱爲「MSHAPE」爲天然I類要測試
  • 更改的配置類型.dll文件
  • 更改CLR支持到/ CLR
  • 設置鏈接 「檔案」 到/ PROFILE
  • 成功重新編譯
  • 添加一個Visual C++測試項目
  • 增加了一個新的單元測試我們荷蘭國際集團的單元測試嚮導
  • 在嚮導中,選擇的方法,我想測試

現在我有以下問題:

  • Visual Studio的報告說,大多數單元測試生成失敗,因爲「失敗比較陣列」
  • C++編譯器的崩潰中的兩個元素時,我試圖編譯測試項目。這條線是罪魁禍首:

    MShape_Accessor ^形狀= gcnew MShape_Accessor();

如果我右鍵單擊並選擇轉到定義,VS表示符號是未定義的。

這裏是MShapeTest.cpp完整的代碼(由Visual Studio生成):

#include "StdAfx.h" 
#include "StdAfx.h" 
using namespace Microsoft::VisualStudio::TestTools::UnitTesting; 
namespace TestProject1 { 
    using namespace System; 
    ref class MShapeTest; 


    /// <summary> 
///This is a test class for MShapeTest and is intended 
///to contain all MShapeTest Unit Tests 
///</summary> 
[TestClass] 
public ref class MShapeTest 
{ 

private: Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ testContextInstance; 
    /// <summary> 
    ///Gets or sets the test context which provides 
    ///information about and functionality for the current test run. 
    ///</summary> 
public: property Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ TestContext 
    { 
    Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ get() 
    { 
    return testContextInstance; 
    } 
    System::Void set(Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ value) 
    { 
    testContextInstance = value; 
    } 
    } 

#pragma region Additional test attributes 
    // 
    //You can use the following additional attributes as you write your tests: 
    // 
    //Use ClassInitialize to run code before running the first test in the class 
    //public: [ClassInitialize] 
    //static System::Void MyClassInitialize(TestContext^ testContext) 
    //{ 
    //} 
    // 
    //Use ClassCleanup to run code after all tests in a class have run 
    //public: [ClassCleanup] 
    //static System::Void MyClassCleanup() 
    //{ 
    //} 
    // 
    //Use TestInitialize to run code before running each test 
    //public: [TestInitialize] 
    //System::Void MyTestInitialize() 
    //{ 
    //} 
    // 
    //Use TestCleanup to run code after each test has run 
    //public: [TestCleanup] 
    //System::Void MyTestCleanup() 
    //{ 
    //} 
    // 
#pragma endregion 
public: [TestMethod] 
    [DeploymentItem(L"TP4.dll")] 
    void MShapeConstructorTest() 
    { 
    MShape_Accessor^ shape = gcnew MShape_Accessor(); 

    } 
}; 
} 
namespace TestProject1 { 

} 

完全一樣的問題發生在每一個安裝VSTS我試過的。

+0

這不是原生的C++。 – alexkr 2009-11-22 21:24:04

+0

我正在嘗試使用測試套件來測試本機C++類,該套件是託管的。這就是爲什麼我想我必須創建一個託管包裝,正如我所解釋的。這裏介紹的代碼來自Visual Studio生成的Test項目。 – Asik 2009-11-22 21:40:39

+0

你可以發佈'MShape_Accessor'的定義嗎?難道它是一個土生土長的班級,你正試圖把它作爲一個託管班級來「重新」嗎? – 2009-11-22 21:57:06

回答

1

我剛剛建立了一個簡單的測試,測試使用MS VS測試,我可以得到它的運行。下面是該項目:

http://www.somethingorothersoft.com/TestTest.zip

我想無論你有問題是MSHAPE的定義做。

或者,你可能只是裏面直接檢驗測試你的非託管代碼。您需要將測試項目的CLR支持從/ CLR:Safe更改爲/ CLR,然後在測試中直接運行C++。

我想包括在演示該功能,但我不能讓這兩種在同一項目中運行 - 使用託管的包裝和一個沒有來自同一目標項目,即兩者。如果您使undertest項目具有靜態庫和遠程CLR支持,那麼您將能夠在測試項目中運行未經修改的代碼。

+0

謝謝。我嘗試了一個新項目,它工作。我不確定那個第一個項目有什麼問題。感謝您直接測試非託管代碼的建議,這可能會使它更容易。 – Asik 2009-11-24 04:41:20