上传图像到云单元测试
本文关键字:单元测试 图像 | 更新日期: 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
返回的字符串是您所期望的值。