[英]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.