Рекомендации по интеграционному тестированию для доступа к данным всех классов тестированияC#

Место общения программистов C#
Ответить
Anonymous
 Рекомендации по интеграционному тестированию для доступа к данным всех классов тестирования

Сообщение Anonymous »

Я использую XUnit с WebApplicationFactory для написания интеграционных тестов для моего приложения C# API->
GetTokenControllerTest вызовет GetToken() для сохранения кода аутентификации в AccessToken, который затем можно использовать через из класса. Установка значения заголовка с помощью AUthorization, что позволяет мне получить доступ к авторизованным конечным точкам в контроллере

Код: Выделить всё

public class TokenDTO
{
public string AccessToken { get; set; }
}

public class GetTokenControllerTest : IClassFixture
{
private readonly HttpClient _client;
private readonly TokenDTO _tokenDTO;

public GetTokenControllerTest(TokenDTO tokenDTO)
{
_tokenDTO = tokenDTO;
var factory = new WebApplicationFactory
();
_client = factory.CreateClient();
}

[Fact, TestPriority(1)]
public async Task GetToken()
{
TokenRequestDto dto = new TokenRequestDto();
dto.Email = "123@gmail.com";
dto.Password = "123456";

var payload = JsonConvert.SerializeObject(dto);
var content = new StringContent(payload, Encoding.UTF8, "application/json");
var GetTokenContentsResponse = await _client.PostAsync("/api/Tokens/Auth", content);

var TokenJson = GetTokenContentsResponse.Content.ReadAsStringAsync().Result;

var TokenDTO = JsonConvert.DeserializeObject(TokenJson);

//Set token so can use through out class
_tokenDTO.AccessToken = TokenDTO.AccessToken;

}

[Fact]
public async Task CallAPIEndPoint1()
{
//re-use AccessToken
_client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _tokenDTO.AccessToken);
var api1 = await _client.GetAsync("api/Car/CarNames");
}
[Fact]
public async Task CallAPIEndPoint2()
{
//re-use AccessToken
_client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _tokenDTO.AccessToken);
var api2 = await _client.GetAsync("api/Car/CarTypes");
}
[Fact]
public async Task CallAPIEndPoint2()
{
//re-use AccessToken
_client.DefaultRequestHeaders.Add("Authorization", "Bearer " + _tokenDTO.AccessToken);
var api3 = await _client.GetAsync("api/Car/CarColour");
}

}
Чтобы я мог успешно вызвать функции контроллера:

Код: Выделить всё

[Authorize]
[HttpPost("CarNames")
public async Task CarNames()
{
try
{
//do something
}
catch (Exception ex)
{
}
}
Все это прекрасно работает. Мой вопрос: как лучше всего использовать токен для всех тестовых классов, поскольку я планировал новый класс для каждого контроллера?
Должен ли я установить глобальную статическую переменную через проект (возможно ли это?)
Должен ли я установить временное значение в appSettings и обновлять его после получения токена, а затем каждый раз необходимо проверить значение в настройках приложения?
Должен ли я создать дубликат функции GetToken() в каждом классе? и используйте [Fact, TestPriority(1)], чтобы обеспечить получение вызова первым (хотя иногда это работает, а иногда нет)
Я вообще новичок в тестировании и хотел бы получить совет по лучшим стратегиям пожалуйста, спасибо за любой ответ

Подробнее здесь: https://stackoverflow.com/questions/781 ... st-classes
Ответить

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

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

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

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

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