2009-11-22 65 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