У меня есть класс 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#
Место общения программистов C#
1731168305
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/fileName?AWSAccessKeyId=AccessKey&Expires=1731254511&Signature=XS%2B19Ihey4u8jfLAOeQcv3ojrUw%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();
}`
Подробнее здесь: [url]https://stackoverflow.com/questions/79168727/csharp-xunit-test-case-failing-for-amazons3-class-methodsgetpresignedurl-putobj[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия