2011-12-06 4 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

Я бы сказал, что это на самом деле не юнит тест - вы пытаетесь загрузить что-то на внешний сервис, который вы не имеете никакого контроля и не может гарантировать, что результаты собираются быть одинаковым от запуска до запуска.

Что вы написали, это тест интеграции , который является проверкой того, как работают два или более программных компонента. В этом случае оба компонента

  • Ваш код
  • Выгрузка облако API

Там нет ничего плохого в интеграционных тестах, но они, как правило, медленнее (в данном случае, из-за загрузки файл в облаке), и они, как правило, более хрупкие. Например, ваш интеграционный тест ломается, если облачная служба недоступна. В вашем коде ничего не изменилось, ничего не изменилось в вашем тесте, но результаты теста были разными.

Если вы хотите провести тестирование вашего метода UploadToCloud, я бы рекомендовал вам начать с добавления функциональности «облачной загрузки» в классе, который реализует интерфейс, например. ICloudUploader. Затем вы можете высмеять фрагменты, которые на самом деле общаются с вашим облачным сервисом, и убедитесь, что функциональность вашего кода верна при всех ситуациях, которые вы хотите протестировать (успешная загрузка, обслуживание недоступно, загрузка не выполняется из-за того, что файл слишком большой, какой бы то ни было).

Для насмешливый из класса, вы можете свернуть свой собственный (написать класс, который реализует свой интерфейс, например public class FakeCloudUploader : ICloudUploader, или посмотреть в рамках насмешливым, как Moq или RhinoMocks.

Как для метода испытаний вы если он не проверяет вывод метода. Он должен подтвердить, что строка, которую вы возвращаете с UploadToCloud, - это значение, которое вы ожидали.

Смежные вопросы