[英]Unit test file upload to AWS S3
如果文件成功上傳到AWS S3存儲桶,則最佳的單元測試方法是什么?
現在,我正在執行以下操作:
[Test]
public void UploadFileToAWS()
{
// Arrange
var bucket = "bucketName";
var keyName = "test_upload.txt";
var originalFile = new FileStream(@"C:\test.txt", FileMode.Open, FileAccess.Read);
// Act
var aws = new AmazonWebServicesUtility(bucket);
var awsUpload = aws.UploadFile(keyName,originalFile);
// Assert
Assert.AreEqual(true, awsUpload);
}
方法UploadFile()使用文件流從AWS文檔中提取並上傳到AWS。
我不喜歡這種方法,因為它需要一個本地文件(C:\\ test.txt)-因此,如果通過版本控制進行共享,則此單元測試將無法進行。
如何修改此單元測試,使其不依賴本地文件?
使用System.IO.Path.GetTempPath()
創建一個臨時文本文件上傳並在單元測試中用作比較是否有意義?
我對單元測試還很陌生,所以我很高興您可以向我指出:-)
非常感謝你!
與其從磁盤上的文件創建流, MemoryStream
使用MemoryStream
。 這樣,您插入其中的文本就是代碼中的常量,也可以用於下載文件和測試整個往返過程。 所以從這個答案中獲取代碼:
private const string StringToTestWith = "some sort of test string goes in here";
[Test]
public void UploadFileToAWS()
{
// Arrange
var bucket = "bucketName";
var keyName = "test_upload.txt";
var uploadFile = GenerateStreamFromString(StringToTestWith);
// Act
var aws = new AmazonWebServicesUtility(bucket);
var awsUpload = aws.UploadFile(keyName, uploadFile);
// Assert
Assert.AreEqual(true, awsUpload);
}
private static Stream GenerateStreamFromString(string s)
{
var stream = new MemoryStream();
var writer = new StreamWriter(stream);
writer.Write(s);
writer.Flush();
stream.Position = 0;
return stream;
}
現在您也可以編寫此測試:
[Test]
public void DoesDownloadGetTheCorrectValue()
{
//This implementation is up to you
var downloadedString = GetFileFromAWSSomehow();
Assert.AreEqual(downloadedString, StringToTestWith);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.