上传图像到云单元测试

本文关键字:单元测试 图像 | 更新日期: 2023-09-27 18:17:00

我正在尝试将图像上传到云,我希望能够测试这一点,这是我已经尝试过的,我真的不完全明白我在做什么,所以如果有人能告诉我该怎么做,我会很感激的。

到目前为止,我已经包含了这个方法的主方法和那个方法的测试。

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

上传图像到云单元测试

我想说的是,这不是一个真正的单元测试——你是在尝试将一些东西上传到一个你无法控制的外部服务,并且不能保证每次运行的结果都是一样的。

您所写的是一个集成测试,它是对两个或多个软件组件如何一起工作的测试。在本例中,这两个组件是

    代码
  • 云上传API

集成测试没有什么问题,但是它们往往比较慢(在这种情况下,由于将文件上传到云上),而且它们往往更脆弱。例如,如果云服务不可用,您的集成测试就会中断。你的代码没有任何改变,你的测试也没有任何改变,但是测试的结果是不同的。

如果你想对你的UploadToCloud方法进行单元测试,我建议你首先将你的"云上传"功能包装在一个实现接口的类中,例如ICloudUploader。然后,您可以模拟出实际与云服务通信的部分,并确保代码的功能在您想要测试的所有情况下(上传成功,服务不可用,由于文件太大而上传失败,等等)都是正确的。

要模拟一个类,您可以自己编写一个实现您的接口的类,例如public class FakeCloudUploader : ICloudUploader,或者查看像Moq或RhinoMocks这样的模拟框架。

对于您提供的测试方法,它并没有真正测试该方法的输出。它应该验证从UploadToCloud返回的字符串是您所期望的值。