Jeśli tworzysz systemy, w których procesy biznesowe zależą od tego, o której godzinie jest [1], nie możesz użyć kodu DateTime.Now
lub podobnego, ponieważ będziesz musiał przeprowadzić testy w np. Przyszłym Koniec miesiąca lub Koniec roku scenariusze. Zmiana czasu systemu operacyjnego na ogół nie jest opcją w przypadku korzystania z certyfikatów SSL i ze względu na złożoność prawidłowego działania systemu rozproszonego.Wzorzec projektowy dla czasu aplikacji?
Jedną opcją jest utworzenie usługi singleton dostępnej dla wszystkich systemów, która zwraca bieżący czas. W produkcji może zwrócić DateTime.Now
iw testach może zwrócić czas gry podobny do 28 lutego w scenariuszu Koniec miesiąca.
Ale czy jest lepszy sposób na zrobienie tego? Jak podejście bardziej zorientowane na bazę danych, ponieważ prowadzi to do lepszej wydajności? A może wstawiłbyś rozproszoną pamięć podręczną? Czy jest jakiś znany wzór projektu?
[1] typowy przykład: procesy biznesowe realizowane przez system ubezpieczeń, rdzeń systemu bankowego, ...
lubię wykorzystanie frameworków takich jak podróbki do kontroli czasu w normalnych testach. Możesz także użyć np. Unity, aby wydobyć czas z kodu produkcyjnego, co oznacza, że wstrzykujesz czas gry w testach i DateTime.Now. Jednak nie można w pełni polegać na tym podejściu, budując większe systemy dla sektora finansowego, ponieważ testy tego typu są często prowadzone przez użytkowników. Zwykły przykład: administrator (może być przedsiębiorcą) przesyła nowy zestaw parametrów biznesowych (takich jak oprocentowanie) do środowiska testowego i chciałby zweryfikować, jak system reaguje z biznesowego punktu widzenia. Muszą być w stanie zmienić czas. –