代码之家  ›  专栏  ›  技术社区  ›  Asik

VisualC++的团队测试问题

  •  1
  • Asik  · 技术社区  · 15 年前

    我正在尝试用VisualStudio测试套件运行本地C++的一些单元测试。我只有一个叫做“形状”的简单类。我遵循了一个教程,并执行了以下步骤:

    • 为我要测试的本机类创建了一个名为“mshape”的“ref class”包装器
    • 已将配置类型更改为.dll
    • 已将clr支持更改为/clr
    • 将链接器“profile”设置为/profile
    • 重新编译成功
    • 增加了VisualC++测试项目
    • 使用单元测试向导添加了新的单元测试
    • 在向导中,选择了要测试的方法

    现在我有以下问题:

    • Visual Studio报告大多数单元测试生成失败,因为“无法比较数组中的两个元素”
    • 当我尝试编译测试项目时,C++编译器崩溃。这句话是罪魁祸首:

      mshape_accessor^shape=gcnew mshape_accessor();

    如果我右键单击并选择Go to Definition,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 {
    
    }
    

    同样的问题也发生在我试过的每一次安装的VST上。

    1 回复  |  直到 15 年前
        1
  •  1
  •   Igor Zevaka    15 年前

    我刚刚用MS-VS测试设置了一个简单的测试,我可以运行它。这是项目:

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

    我想不管你有什么问题,都是关于mshape的定义。

    或者,您可以直接在测试中测试非托管代码。您需要将测试项目的CLR支持从/CLR:Healthto/CLR更改,然后在测试中直接运行C++。

    我试图在演示中包含这一功能,但我不能让这两种功能在同一个项目中运行——即既使用托管包装器,又不使用来自同一目标项目的包装器。如果你 undertest 项目静态库和远程clr支持,您将能够在测试项目中从中运行未管理的代码。