1

私は画像をクラウドにアップロードしようとしていますが、これをテストできるようにしたいと思います。これは私がすでに試したことです。私は何をしているのか完全には理解していません。誰かが私に何をすべきか教えてくれたら、私は感謝します。それ。

これまでの主な方法とその方法のテストを含めました。

public static String UploadToCloud(string fileName)
    {
        try
        {
            SetUpConnection();
            #region Upload a File from local storage to the Cloud
            // Get a reference to the blob.
            blob = blobContainer.GetBlobReference("Images/" + fileName.Substring(fileName.LastIndexOf('\\')));
            blob.UploadFile(fileName);
            return blob.Uri.ToString();
            #endregion
        }
        catch (StorageClientException e)
        {
            Console.WriteLine("Storage client error encountered: " + e.Message);
            return "Upload failed";
        }
    }

/// <summary>
    ///A test for UploadToCloud
    ///</summary>
    [TestMethod()]
    public void UploadToCloudTest()
    {
        string fileName = "https://kevin.blob.core.windows.net/cp300/Images//skin-mole.jpg";
        Image expected = Image.FromFile(@"C:\Users\Public\Pictures\Sample Pictures\skin-mole.jpg");
        string actual;
        actual = CloudConnection.UploadToCloud(fileName);

        //Compares to images and checks they are exactly the same
        MemoryStream ms = new MemoryStream();
        expected.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        String expectedBitmap = Convert.ToBase64String(ms.ToArray());
        ms.Position = 0;
        actual.Save(ms, System.Drawing.Imaging.ImageFormat.Png);
        String actualBitmap = Convert.ToBase64String(ms.ToArray());

        Assert.AreEqual(expectedBitmap, actualBitmap); 

        //Assert.AreEqual(expected, actual);
        //Assert.Inconclusive("Verify the correctness of this test method.");
    }
4

1 に答える 1

1

これは実際には単体テストではないと思います。制御できないものを外部サービスにアップロードしようとしており、実行ごとに結果が同じになることを保証できません。 .

あなたが書いたのは統合テストです。これは、2 つ以上のソフトウェア コンポーネントがどのように連携するかをテストするものです。この場合、2 つのコンポーネントは次のとおりです。

  • あなたのコード
  • クラウド アップロード API

統合テストに問題はありませんが、速度が遅くなる傾向があり (この場合は、ファイルをクラウドにアップロードするため)、脆くなる傾向があります。たとえば、クラウド サービスが利用できない場合、統合テストは機能しなくなります。コードは何も変更されておらず、テストも何も変更されていませんが、テストの結果は異なっていました。

メソッドの単体テストを行う場合はUploadToCloud、「クラウド アップロード」機能をインターフェイスを実装するクラスにラップすることから始めることをお勧めしますICloudUploader。次に、実際にクラウド サービスと通信する部分をモック化し、テストするすべての状況 (アップロードの成功、サービスが利用できない、ファイルが大きすぎるためにアップロードが失敗する) でコードの機能が正しいことを確認します。、 なんでもいい)。

クラスをモックアウトするには、独自のクラスを展開する (たとえば、インターフェイスを実装するクラスを作成する、またはMoqRhinoMockspublic class FakeCloudUploader : ICloudUploaderなどのモック フレームワークを調べる) ことができます。

あなたが提供したテスト方法に関しては、実際にはメソッドの出力をテストしていません。UploadToCloud返される文字列が期待した値であることを検証する必要があります。

于 2011-12-06T13:30:47.033 に答える