2011-12-06 27 views
1

イメージをクラウドにアップロードしようとしていますが、これをテストできるようにしたいのですが、 ここに私がすでに試したことがあります。何をすべきか教えてください、私はそれを感謝します。イメージをクラウドにアップロードUnitTest

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

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."); 
    } 

答えて

1

私はこれは本当にユニットテストではないことを言うだろう - あなたはを制御することはできませんし、その結果をしようとしていることを保証することはできません外部のサービスに何かをアップロードしようとしています走ってから走るまで同じである。

統合テストは、2つ以上のソフトウェアコンポーネントがどのように連携して動作するかをテストしたものです。この場合、2つのコンポーネントが

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

あり統合テストと間違って何もいませんが、彼らはアップロードのために、この場合は(遅くなる傾向がありますクラウドへのファイル)、彼らはより脆い傾向があります。たとえば、クラウドサービスが利用できなかった場合、統合テストは中断されます。あなたのコードで変更されたものは何もありませんでした。あなたのテストでは何も変わりませんでしたが、テストの結果は異なりました。

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

クラスをあざけるためには、(たとえばpublic class FakeCloudUploader : ICloudUploaderのために、あなたのインターフェースを実装するクラスを作成し、またはMoqまたはRhinoMocksのようなモックフレームワークに見て独自のロールすることができます。

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

関連する問題