我正在尝试将图片上传到云端,我希望能够对此进行测试, 这是我已经尝试过的,我真的不完全明白我在做什么,所以如果有人能告诉我该怎么做,我将不胜感激。
到目前为止,我已经包含了此方法的主要方法和该方法的测试。
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.");
}
答案 0 :(得分:1)
我会说这不是一个真正的单元测试 - 你试图将一些东西上传到你无法控制的外部服务,并且不能保证结果将是相同的跑去跑。
您编写的是集成测试,它是对两个或多个软件组件如何协同工作的测试。在这种情况下,两个组件是
集成测试没有任何问题,但它们往往较慢(在这种情况下,由于将文件上传到云端),而且它们往往更脆弱。例如,如果云服务不可用,您的集成测试将会中断。代码中没有任何变化,测试中没有任何变化,但测试结果不同。
如果您想对UploadToCloud
方法进行单元测试,我建议您首先将“云上传”功能包装在实现接口的类中,例如: ICloudUploader
。然后,您可以模拟与您的云服务实际通信的部分,并确保您的代码的功能在您要测试的所有情况下都是正确的(成功上传,服务不可用,上传由于文件太大而失败,无论如何)。
对于模拟一个类,你可以自己滚动(编写一个实现你的接口的类,例如public class FakeCloudUploader : ICloudUploader
),或者查看一个模拟框架,如Moq或RhinoMocks
至于你提供的测试方法,它并没有真正测试方法的输出。它应该验证您从UploadToCloud
返回的字符串是您期望的值。