私は C++/CX タスクの初心者であり、これに夢中になっています。次のコードは、「無効なパラメーターが致命的と見なされる関数に無効なパラメーターが渡されました」という例外を生成します。私はそれがファイルを正常に作成し、そのタスクの継続に入ることを知っています(または少なくともそこに定義されたブレークポイントに到達します)、ファイルが存在しないという事実のために例外が発生することを(以前の作業に基づいて)99%確信していますXmlDocument::LoadFromFile メソッドを爆発させる有効な XML。実際にその例外をキャッチしたかったので、いくつかの MSDN ドキュメントで定義されているエラー処理の継続を作成しました。(2回目のサンプル)
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 Test エンジンでは動作しませんか? テストで明示的にチェックできる XML ファイルが悪い場合に生成される「実際の」例外をチェックするより良い方法はありますか?
前もって感謝します