У меня есть класс Amazons3 с его методами (GetPreSignedURL,PutObjectAsync,ListObjectsV2Async). Я пытаюсь издеваться над ними, используя Moq в C# Xunit. Но в вызывающем методе происходит сбой.
Код класса AmazonS3
public class AmazonServiceService : IAmazonService
{
private IAmazonS3 _client = null;
public AmazonServiceService()
{
}
public void CreateAmazonS3Client(ObjectStorageConfiguration config)
{
_client = new AmazonS3Client(config.AccessKeyId, config.Secret, new AmazonS3Config
{
ServiceURL = config.ServerUrl
});
}
public string GetPreSignedUrl(string? fileName, string? bucketName)
{
var request = new GetPreSignedUrlRequest
{
BucketName = bucketName,
Key = fileName,
Expires = DateTime.Now.AddDays(1)
};
// Get path for request
return _client.GetPreSignedURL(request);
}
public string CreateDirectoryInS3Bucket(string? bucketName, string? directoryPath)
{
try
{
// Create the directory object
PutObjectRequest request = new()
{
BucketName = bucketName,
Key = directoryPath,
ContentBody = "" // Empty content body for a directory
};
var directoryCreated= _client.PutObjectAsync(request).Result;
return directoryPath?? "";
}
catch (AmazonS3Exception ex)
{
if (ex.StatusCode == HttpStatusCode.NotFound)
throw new FileNotFoundException();
throw;
}
catch(Exception ex)
{
throw;
}
}
public async Task FileExist(string? filename, string? bucket)
{
try
{
var request = new ListObjectsV2Request
{
BucketName = bucket,
Prefix = filename,
};
var response = await _client.ListObjectsV2Async(request);
return response.S3Objects.Any();
}
catch (Exception ex) {
return false;
}
}
}
То, что я пробовал, не удалось выполнить макетную настройку с ошибкой «Непереопределяемые элементы (здесь: AmazonS3Client.GetPreSignedURL) не могут использоваться в настройке»
private ObjectStorageService CreateService()
{
return new ObjectStorageService();
}
The below test case is getting passed after the change to IAmazonS3
`[Fact]
public void CreateAmazonS3Client_StateUnderTest_ExpectedBehavior()
{
//Arrange
ObjectStorageConfiguration config = new ObjectStorageConfiguration
{
AccessKeyId = "AccessKey",
Secret = "Secret",
ServerUrl = "http://testserver.com/"
};
// Act
var mockS3Client = new Mock();
var expectedUrl = "https://testserver.com/bucketName/fileN ... v3ojrUw%3D";
var request = new GetPreSignedUrlRequest
{
BucketName = "bucketName",
Key = "fileName",
Expires = DateTime.Now.AddDays(1)
};
mockS3Client
.Setup(client => client.GetPreSignedURL(request))
.Returns(expectedUrl);
var objService = new ObjectStorageService(); // Replace with your actual service class
objService.CreateAmazonS3Client(config);
// Act
var result = objService.GetPreSignedUrl("fileName", "bucketName");
// Assert
Assert.Equal(expectedUrl, result);
mockS3Client.Verify(client => client.GetPreSignedURL(request), Times.Once);
// Assert
Assert.True(false);
this.mockRepository.VerifyAll();
}`
Подробнее здесь: https://stackoverflow.com/questions/791 ... url-putobj
Csharp xunit Не удалось выполнить тестовый пример для методов класса Amazons3 (GetPreSignedURL, PutObjectAsync, ListObje ⇐ C#
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Невозможно выполнить ошибку HTTP -запроса при попытке перечислить ведра для клиента Amazons3
Anonymous » » в форуме JAVA - 0 Ответы
- 73 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Невозможно выполнить ошибку HTTP -запроса при попытке перечислить ведра для клиента Amazons3
Anonymous » » в форуме JAVA - 0 Ответы
- 13 Просмотры
-
Последнее сообщение Anonymous
-
-
-
Целесообразно ли писать тестовый пример для каждого класса в вашей программе?
Anonymous » » в форуме JAVA - 0 Ответы
- 53 Просмотры
-
Последнее сообщение Anonymous
-