0

我是 C++/CX 任务的新手,这让我抓狂。以下代码生成异常“无效参数已传递给认为无效参数致命的函数”。我知道它成功地创建了文件并进入了该任务的继续(或至少达到了在那里定义的断点),并且我 99% 确定(基于以前的工作)由于文件不是导致 XmlDocument::LoadFromFile 方法崩溃的有效 XML。我想尝试实际捕获该异常,因此我构建了几个 MSDN 文档中定义的错误处理延续。(第二个样本)

    TEST_METHOD(The_storage_file_must_reference_a_valid_xml_file)
    {
        auto folder = ApplicationData::Current->LocalFolder;

        auto createFileTask = 
            create_task(ApplicationData::Current->LocalFolder->CreateFileAsync("TestFile.txt", CreationCollisionOption::ReplaceExisting))
            .then([this] (StorageFile^ file)
            {
                XmlLoadSettings^ loadSettings = ref new XmlLoadSettings();
                loadSettings->ProhibitDtd = false;
                loadSettings->ResolveExternals = false;

                auto loadXmlDocumentTask = 
                    create_task(XmlDocument::LoadFromFileAsync(file, loadSettings))
                    .then([this] (XmlDocument^ doc)
                    {
                        int x = 99;
                    });
            });
    }

这是带有错误继续的代码....

TEST_METHOD(The_storage_file_must_reference_a_valid_xml_file)
    {
        auto cut = ref new CategoryDataLoadBuilder();
        auto folder = ApplicationData::Current->LocalFolder;

        auto createFileTask = 
            create_task(ApplicationData::Current->LocalFolder->CreateFileAsync("TestFile.txt", CreationCollisionOption::ReplaceExisting))
            .then([this] (StorageFile^ file)
            {
                XmlLoadSettings^ loadSettings = ref new XmlLoadSettings();
                loadSettings->ProhibitDtd = false;
                loadSettings->ResolveExternals = false;

                auto loadXmlDocumentTask = 
                    create_task(XmlDocument::LoadFromFileAsync(file, loadSettings))
                    .then([this] (task<XmlDocument^> t)
                    {
                        try
                        {
                            t.get();
                        }
                        catch (COMException^ ex)
                        {
                            int x = 99;
                        }
                    });
            });
    }

当我尝试调试这个测试时,我在测试引擎中遇到了访问冲突,而且通常情况下,调试器似乎只是陷入了困境。

我是否误解了错误延续的工作原理?它在 VS 测试引擎中不起作用吗?有没有更好的方法来检查当 XML 文件错误时生成的“真实”异常,我可以在我的测试中显式检查?

提前致谢

4

1 回答 1

1

经过一些额外的研究和理解,我发现了这篇博文:http ://w8md.wordpress.com/2012/09/26/async-unit-tests-in-ccx/ 。按照 MSDN 论坛中的链接如何通过 c++ 在 unittest 项目中使用异步功能?我看到这在 MS Test 框架中不受支持。文章中提供的源代码工作正常。作为一个实验,我提取了代码来泵送事件,并且能够让测试运行。(当然,我会推荐使用/修改原作者的源代码。)

(顺便说一句,回答我自己的问题我非常不舒服,但我不确定还能做什么。)

于 2013-01-03T06:26:35.113 回答