我有一個相當簡單的類,我試圖單元測試。一般來說,我對單元測試非常陌生,我不確定我應該在這裏測試什麼。單元測試亞馬遜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的建議提供了一些方法來幫助遏制這種情況。 –