我有一个相当简单的类,我试图单元测试。一般来说,我对单元测试非常陌生,我不确定我应该在这里测试什么。单元测试亚马逊S3
我可以弄清楚如何编码的唯一测试用例是stream
的空参数。除此之外,我不知道如何测试PutObjectRequest
或其他的结果。如果我在这里使用嘲笑,怎么样?
public class AmazonS3Service : IAmazonS3Service
{
private readonly Uri baseImageUrl;
private readonly Uri s3BaseUrl;
private readonly string imageBucket;
public AmazonS3Service()
{
imageBucket = ConfigurationManager.AppSettings["S3.Buckets.Images"];
s3BaseUrl = new Uri(ConfigurationManager.AppSettings["S3.BaseAddress"]);
baseImageUrl = new Uri(s3BaseUrl, imageBucket);
}
public Image UploadImage(Stream stream)
{
if (stream == null) throw new ArgumentNullException("stream");
var key = string.Format("{0}.jpg", Guid.NewGuid());
var request = new PutObjectRequest
{
CannedACL = S3CannedACL.PublicRead,
Timeout = -1,
ReadWriteTimeout = 600000, // 10 minutes * 60 seconds * 1000 milliseconds
InputStream = stream,
BucketName = imageBucket,
Key = key
};
using (var client = new AmazonS3Client())
{
using (client.PutObject(request))
{
}
}
return new Image
{
UriString = Path.Combine(baseImageUrl.AbsoluteUri, key)
};
}
}
其中大部分将被视为集成测试,对吧?另外,我不确定嘲笑https的意思。 –
通过嘲笑https我的意思是嘲笑配置管理器返回HTTPS和HTTP网址。 –
是的,你说的很多都是集成测试,但那是因为你的代码是如何耦合的。 Mike Z的建议提供了一些方法来帮助遏制这种情况。 –