0

我在 VS 2012 C++/CX 中有以下“Windows Store/Metro Style”测试方法

这个成功了,还行

TEST_METHOD(TestMethod)
{
    bool passed = false;
    concurrency::event finished;
    finished.reset();                                   
    auto testTask = concurrency::create_task( [&finished, &passed]()
    {   
        passed = true;
        finished.set();
    }); 
    finished.wait(100000);
    Assert::IsTrue(passed);
}

这个失败了,这也没关系:

TEST_METHOD(TestMethod)
{
    bool passed = true;
    concurrency::event finished;
    finished.reset();                                   
    auto testTask = concurrency::create_task( [&finished, &passed]()
    {   
        passed = false;
        finished.set();
    }); 
    finished.wait(100000);
    Assert::IsTrue(passed);
}

但由于某种原因,这个测试并没有失败:

TEST_METHOD(FailedTest)
{
    concurrency::event finished;
    finished.reset();                                   
    auto testTask = concurrency::create_task( [&finished]()
    {   
        Assert::IsTrue(false);
        finished.set();
    });
    finished.wait(100000);          
}

难道我做错了什么?

作为旁注,一种可能的解决方法是将我的所有测试结果放入变量中并在之后“测试”它们finished.wait(100000);,但我仍然想知道我正在做的事情是否真的有问题。

4

1 回答 1

1

测试确实失败了。如果您打开 Tests Output 窗口(View -> Output,然后在Show output from下,选择Tests),您应该会看到以下内容:

由于执行过程意外退出,活动的测试运行被中止。要进一步调查,请在计算机级别或进程 vstest.executionengine.appcontainer.x86.exe 启用本地故障转储。转到更多详细信息:http: //go.microsoft.com/fwlink/ ?linkid=232477

测试资源管理器中,测试应该显示为灰色,因为测试未能运行完成。不幸的是,由于测试运行完全失败,如果测试在过去的任何时间通过,该测试仍然出现在Passed Tests组中,并且旁边仍然有一个绿色复选标记。依靠灰显的名称作为测试未运行完成的指示。

在这种情况下,我建议在Microsoft Connect上打开一个关于测试资源管理器中令人困惑的 UI 的错误(如果您打开错误,请将链接作为对此答案的评论或您的问题发布,以便其他人可以找到它)。

于 2012-09-25T18:23:38.077 回答