首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >TestContext.TestName在托管C++测试中的应用

TestContext.TestName在托管C++测试中的应用
EN

Stack Overflow用户
提问于 2016-03-18 17:29:26
回答 1查看 563关注 0票数 1

如何在托管VS TestName测试代码中使用TestContext类的TestContext成员自动将测试方法的名称输出到调试控制台?

我找到的每一个示例都是在C#中找到的,我无法正确地将其转换为C++。在这里,我试图通过在静态TestContext方法期间捕获一个ClassInitialize对象来实现这一点,但这是行不通的。

代码语言:javascript
复制
#include <windows.h>
#include <msclr/marshal_cppstd.h>

using namespace Microsoft::VisualStudio::TestTools::UnitTesting;

[TestClass]
public ref class SampleTestClass
{

public:

    [TestMethod]
    void testMethod1()
    {

    }

    [TestMethod]
    void testMethod2()
    {

    }

    [TestMethod]
    void testMethod3()
    {

    }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    Tests Setup and Teardown                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    static TestContext^ myTestContext;

    [TestInitialize]
    void testCaseInitialize()
    {
        msclr::interop::marshal_context context;
        std::wstring testName = context.marshal_as<std::wstring>( myTestContext->TestName );
        std::wstring dbgSend = L"initializing " + testName;
        ::OutputDebugString( dbgSend.c_str() );
    }

    [TestCleanup]
    void testCaseCleanup()
    {
        msclr::interop::marshal_context context;
        std::wstring testName = context.marshal_as<std::wstring>( myTestContext->TestName );
        std::wstring dbgSend = L"tearing down " + testName;
        ::OutputDebugString( dbgSend.c_str() );
    }

    [ClassInitialize]
    static void testClassInitialize( TestContext^ context )
    {
        myTestContext = context;
    }

    [ClassCleanup]
    static void testClassCleanup()
    {

    }



};

输出

代码语言:javascript
复制
[9404] initializing testMethod1
[9404] tearing down testMethod1
[9404] initializing testMethod1
[9404] tearing down testMethod1
[9404] initializing testMethod1
[9404] tearing down testMethod1

期望输出

代码语言:javascript
复制
[9404] initializing testMethod1
[9404] tearing down testMethod1
[9404] initializing testMethod2
[9404] tearing down testMethod2
[9404] initializing testMethod3
[9404] tearing down testMethod3
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2016-03-18 17:52:24

一位同事替我回答了这个问题。如果您创建一个名为TestInstance的公共成员属性,该框架将自动为您设置测试上下文。以下是适用于我的确切语法。

代码语言:javascript
复制
#include <windows.h>
#include <msclr/marshal_cppstd.h>

using namespace Microsoft::VisualStudio::TestTools::UnitTesting;

[TestClass]
public ref class SampleTestClass
{

public:

    [TestMethod]
    void testMethod1()
    {

    }

    [TestMethod]
    void testMethod2()
    {

    }

    [TestMethod]
    void testMethod3()
    {

    }

////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
//    Tests Setup and Teardown                                                                                    //
////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

    private:
    TestContext^ myTestContextInstance;

    public:
    property TestContext^ TestContext
    {

        virtual Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ get()
        {
            return myTestContextInstance;
        }

        virtual void set( Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ value)
        {
            myTestContextInstance = value;
        }
    }


    [TestInitialize]
    void testCaseInitialize()
    {
        msclr::interop::marshal_context context;
        std::wstring testName = context.marshal_as<std::wstring>( myTestContextInstance->TestName );
        std::wstring dbgSend = L"initializing " + testName;
        ::OutputDebugString( dbgSend.c_str() );
    }

    [TestCleanup]
    void testCaseCleanup()
    {
        msclr::interop::marshal_context context;
        std::wstring testName = context.marshal_as<std::wstring>( myTestContextInstance->TestName );
        std::wstring dbgSend = L"tearing down " + testName;
        ::OutputDebugString( dbgSend.c_str() );
    }

    [ClassInitialize]
    static void testClassInitialize( Microsoft::VisualStudio::TestTools::UnitTesting::TestContext^ context )
    {

    }

    [ClassCleanup]
    static void testClassCleanup()
    {

    }

};
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/36090726

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档