0

次の単体テストは失敗します。

[TestMethod]
public void Add_file_to_blob_and_retrieve_it()
{
    var blobName = Guid.NewGuid().ToString();
    var testFileContents = File.ReadAllText(TestFileSpec);

    Trace.WriteLine(string.Format("Opening blob container {0}", UnitTestBlobAgentName));
    CloudStorageAccount.SetConfigurationSettingPublisher(
            (configName, configSetter) => configSetter(ConfigurationManager.AppSettings[configName]));
    var cloudStorage = CloudStorageAccount.FromConfigurationSetting("StorageConnectionString");
    var blobClient = cloudStorage.CreateCloudBlobClient();
    var container = blobClient.GetContainerReference(UnitTestBlobAgentName.ToLower());

    try
    {
        Trace.WriteLine(string.Format("Uploading file {0}", TestFileSpec));
        var blob = container.GetBlobReference(blobName);
        blob.UploadFile(TestFileSpec);
        blob.Properties.ContentType = "ByteArray";
        blob.SetProperties();
        var blob1 = container.GetBlobReference(blobName);
        var found = blob1.DownloadText();
        Assert.AreEqual(testFileContents.Trim(), found.Trim());
    }
    finally
    {
        if (null != container)
        {
            Trace.WriteLine(string.Format("Deleting blob {0}", blobName));
            var blob2 = container.GetBlobReference(blobName);
            blob2.DeleteIfExists(new BlobRequestOptions { DeleteSnapshotsOption = DeleteSnapshotsOption.IncludeSnapshots });
        }
    }
}

0xFEFF返される文字列は dword (Unicode BOM)で始まることが判明しました。Microsoft のデバッグ シンボルを調べたところ、BOM がリターン ストリームに存在します。AFAICT、それはクラスのHttpResponse.GetResponseStream()メソッド呼び出しから来ていMicrosoft.WindowsAzure.StorageClient.CloudBlobます。

入力と出力が同一であることを確認する最善の方法は何ですか? 入る前に、入力が Unicode に変換されていることを確認しますか? 出力から BOM を取り除きますか? 他のアイデアはありますか?

4

1 に答える 1