Konfigurujemy Unit Test w Universal Windows Platform
01.06.2016 01:49
Do każdego projektu w Universal Windows Platform możemy dodać test jednostkowy, niezbędny do dewelopingu nowych rzeczy, czy naprawy błędów.
Taki test zapewne w wielu przypadkach będzie wymagał dodania konfiguracji, aby nie hardcodować na sztywno parametrów niezbędnych do działania (np. danych do logowania). W tym celu można podać potrzebne parametry (klucz -wartość) w pliku, z którego będą zaczytywane niezbędne informacje podczas uruchomienia Unit Testu.
Taki plik jest niezależny od kodu, a zatem nie musi być dorzucany do otwartego repozytorium. Dzięki temu poufne dane, jak np. login i hasło do konta na dobrychprogramach, które pozwalają na testowanie DePeszy, nie będą udostępniane na zewnątrz. Zatem do dzieła!
Plik z parametrami w XML - konfiguracja
Plik z parametrami klucz - wartość jest następującym w formacie XML :
<?xml version="1.0" encoding="utf-8"?> <RunSettings> <TestRunParameters> <Parameter name="dpTestLogin" value="LOGIN" /> <Parameter name="dpTestPassword" value="HASŁO" /> </TestRunParameters> </RunSettings>
Łączymy go z testami w naszej solucji za pomocą menu w Visual Studio w Test->Test Settings i Select Test Settings File. Umieściłem go w projekcie djfoxer.dp.notification.Test jako plik test.runsettings, z wyłączeniem z Gita.
Od tej chwili uruchomiony test będzie wiedział skąd ma pobierać dane konfiguracyjne.
Użycie danych w testach
Teraz w kodzie odwołujemy się do danych w XML za pomocą zmiennej Properties w obiekcie TestContext w klasach testowych (TestClass):
[TestClass] public class UnitTest1 { private static TestContext _testContext; private static DpLogic logic = null; [ClassInitialize] public static void SetupTests(TestContext testContext) { _testContext = testContext; logic = new DpLogic(); } [TestMethod] private voidLogin() { Tuple<bool, DateTime?> success = null; Task.Run(async () => { success = await logic.SetSessionCookie( _testContext.Properties["dpTestLogin"].ToString(), _testContext.Properties["dpTestPassword"].ToString() ); }).GetAwaiter().GetResult(); Assert.AreNotEqual(success.Item1, false); } }
Elegancko i bez zbędnych poufnych danych w kodzie. Kod łatwy do dowolnej parametryzacji, bez zmian w kodzie, z zachowaniem bezpieczeństwa. Oczywiście pamiętajmy, aby pliki XML z danymi dodać do ignorowanych w konfiguracji repozytorium.
DePesza dostępna jest w markecie Windows 10 (desktop i mobile). Bezpośredni link: DePesza.
Aktualne źródła można znaleźć na GitHub pod adresem: https://github.com/djfoxer/dp.notification