Csharp xunit Не удалось выполнить тестовый пример для методов класса Amazons3 (GetPreSignedURL, PutObjectAsync, ListObjeC#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 Csharp xunit Не удалось выполнить тестовый пример для методов класса Amazons3 (GetPreSignedURL, PutObjectAsync, ListObje

Сообщение Anonymous »

У меня есть класс 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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»