Last active
January 31, 2022 19:41
-
-
Save kant2002/af0a40df10c154eaa4a84f64ce2a9d60 to your computer and use it in GitHub Desktop.
Тестирование времени в C#
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
void EnrichRequest(Request request) | |
{ | |
var days = configurationService.GetValidDurationInDays(); | |
request.ValidTo = request.ValidTo ?? DateTime.Now.AddDays(days); | |
} | |
// Супер легко использовать | |
EnrichRequest(request); | |
/* | |
Предполагаемо тестируемые сценарии | |
1. время жизни запроса указано | |
2. время жизни запроса не указано и количество дней в конфигурации задано | |
3. время жизни запроса не указано и количество дней в конфигурации не задано. | |
*/ | |
// Чтобы протестировать надо сделать 2 мока. | |
// каждый мок просто будет добавлять в тест кучу кода который будет путать | |
// что собственно тест делает. | |
void RequestLifetimeSet() | |
{ | |
var configurationService = Mock<IConfigurationService>().Configure(_ => GetValidDurationInDays = () => 5)); | |
// опуская в сторону как конкретно деляются моки и какой библиотекой. | |
DateTimeMock.Now = () => DateTime.Parse("2022-02-01 01:24:10")); | |
var request = new Request() { ValidTo = DateTime.Parse(DateTime.Parse("2022-02-02 00:00:00")) }; | |
EnrichRequest(request); | |
Assert.Equals(DateTime.Parse("2022-02-02 00:00:00"), request.ValidTo); | |
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
// вы не будете тестировать данный код. | |
// тут можно только протестировать что конфигурационный сервис таки вызвали. | |
// как мне кажется это уже проще тестировать интеграционно с другими способами. | |
void EnrichRequest(Request request) | |
{ | |
var days = configurationService.GetValidDurationInDays(); | |
EnrichRequest(request, days, DateTime.Now); | |
} | |
// тестироваться будет только этот. | |
void EnrichRequest(Request request, int defaultLifetimeDays, DateTime currentTime) | |
{ | |
var days = configurationService.GetValidDurationInDays(); | |
request.ValidTo = request.ValidTo ?? defaultLifetimeDays.AddDays(days); | |
} | |
// Можно также легко использовать | |
EnrichRequest(request); | |
/* | |
Предполагаемо тестируемые сценарии | |
1. время жизни запроса указано | |
2. время жизни запроса не указано и количество дней в конфигурации задано | |
3. время жизни запроса не указано и количество дней в конфигурации не задано. | |
*/ | |
// Чтобы протестировать надо сделать 2 мока. | |
// каждый мок просто будет добавлять в тест кучу кода который будет путать | |
// что собственно тест делает. | |
void RequestLifetimeSet() | |
{ | |
// магии моков нет, и остались только утверждения который хорошо транслируются в то как заказчик/менеджер их говорит. | |
// запрос который дейстителен до полуночи 2 февраля 2022г. | |
var request = new Request() { ValidTo = DateTime.Parse("2022-02-02 00:00:00")) }; | |
// обрабатывая запрос при длительности жизни по умолчанию 5 дней, в час ночи, 24 минуты 10 секунд 1 февраля 2022г. | |
EnrichRequest(request, defaultLifetimeDays: 5, currentTime: DateTime.Parse("2022-02-01 01:24:10")); | |
// запрос действителен до полуночи 2 февраля 2022г. | |
Assert.Equals(DateTime.Parse("2022-02-02 00:00:00"), request.ValidTo); | |
} | |
// чуть меньше церемонии в формировании тестов, чуть больше акцента на том что тесты делают. | |
// из минусов то что я на одну функцию больше написал. | |
// конкретно такую логику конечно вообще не так разбить на функции, но это уже другое. | |
// как мне кажется важно чтобы тесты максимально походили на язык спеки, и минимум обвязки. |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment