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
Мобильная версия