Miesięczne archiwum: Kwiecień 2017

Podsumowanie tygodnia odc.6

Podsumowanie tygodnia odc.6

A więc mamy już piątek 28.04 więc czas na podsumowanie tygodnia odc.6. Za nami ósmy tydzień zmagań w Daj Się Poznać. A więc czas na garść moich sukcesów i porażek minionego tygodnia, oraz kilka linków które wydały mi się ciekawe.

Podsumowanie tygodnia odc.6

Co się udało

Zrobiłem całkiem spory kawałek testów jednostkowych w xUnit, oraz nauczyłem się używać go testowania aplikacji pisanych w Xamarin.Forms.

Co się nie udało

Nie udało mi się zaimplementować ekranu kalendarza, oraz części lokalnej bazy danych. Te dwa punkty będą do zrealizowania w najbliższym tygodniu.

Ciekawe linki tygodnia

Podsumowanie

Do zobaczenia za tydzień w kolejnym odcinku Podsumowania Tygodnia

3 najważniejsze słowa w xUnit

3 najważniejsze słowa w xUnit

Aplikacje stają się coraz bardziej skomplikowane, zawierają mnóstwo logiki biznesowej dlatego testy jednostkowe w naszych aplikacjach są ich ważnym aspektem. Dzisiaj chciałbym wam przedstawić 3 najważniejsze słowa w xUnit.

3 najważniejsze słowa w xUnit

Fact, Theory, Assert – Arrange, Act, Assert

Każdy test powinien mieć odpowiednią strukturę. Dlatego ja zawsze dziele je na etap inicjalizacji Arrange, etap wykonania Act i etap porównania wyników Assert.

Przykładowa metoda do testów może mieć następującą strukturę

public void TestMethod1()
{
    //Arrange

    //Act

    //Assert
}

Fact

Jest to podstawowy typ testu w xUnit. W porównaniu do innych framework-ów każdy test stanowi odrębną jednostkę. W każdym z nich należy zainicjalizować wymagane komponenty jak również zapewnić obsługę rollback.

Poniższy przykład ma na celu przetestowanie warstwy serwisu naszej aplikacji i mechanizmu pobierania danych na konkretną datę.

Metoda ta składa się z sekcji inicjalizacji Arrang, wykonania Act, oraz sprawdzenia warunku Assert.

        [Fact]
        public async void CanGetProblemForDate_20170415()
        {
            //Arrange
            DateTime expected = new DateTime(2017, 04, 15);
            DateTime actual = DateTime.Today;
            IDataService service = new MockDataService();

            //Act
            Problem problem = await service.GetProblemByDateAsync(new DateTime(2017, 04, 15));
            actual = problem.CreationDate;

            //Assert
            Assert.Equal(expected, actual);
        }

Theory

Co w sytuacji kiedy chcemy przetestować kolekcję przypadków testowych? Z pomocą przychodzi nam słówko Theory umożliwia ono nam dostarczenie parametrów wejściowych dla metody testowej.

Przykład użycia możecie zobaczyć na listingu poniżej.

        [Theory]
        [InlineData("2017-04-15")]
        [InlineData("2017-04-16")]
        [InlineData("2017-04-17")]
        public async void CanGetDifferentProblemsForEachDayWhichIsNotNull(DateTime currentDate)
        {
            //Arrange
            IDataService service = new MockDataService();

            //Act
            Problem problem = await service.GetProblemByDateAsync(currentDate);

            //Assert
            Assert.NotNull(problem);
        }

Jeżeli jest nam potrzebny bardziej zaawansowany sposób użycia Theory w którym przekazujemy nasz obiekt jako parametr wejściowy możemy użyć do tego klasy TheoryData.

Przykład użycia na poniższym listingu testuje nam dodawanie kolejnych TodoItem do naszej warstwy serwisu.

    public class DataServiceTests
    {
        private static TodoItem[] todoItems = new TodoItem[]
        {
            new TodoItem { Id = Guid.NewGuid(), Name = "Buy a milk", Done = false, DueDate = null},
            new TodoItem { Id = Guid.NewGuid(), Name = "Buy a TV", Done = false, DueDate = null},
            new TodoItem { Id = Guid.NewGuid(), Name = "Buy a new iPhone", Done = false, DueDate = DateTime.Today},
            new TodoItem { Id = Guid.NewGuid(), Name = "Buy a pomodoro", Done = false, DueDate = null},
            new TodoItem { Id = Guid.NewGuid(), Name = "Buy a bread", Done = false, DueDate = null}
        };

        public static TodoTheoryData<TodoItem> TodoItemsData { get; } = new TodoTheoryData<TodoItem>(todoItems);

        [Theory]
        [MemberData("TodoItemsData")]
        public async void InStorageAreFiveItems(TodoItem item)
        {
            //Arrange
            DataService service = new DataService();
            await service.AddTodoItemAsync(item);

            //Act
            IEnumerable<TodoItem> todoItems = await service.GetAllAsync();

            //Assert
            Assert.Equal(5, todoItems.Count());
        }
    }

    public class TodoTheoryData<T> : TheoryData<T>
    {
        public TodoTheoryData(IEnumerable<T> data)
        {
            foreach (T t1 in data)
            {
                Add(t1);
            }
        }
    }

Assert

Klasa Assert dostarcza nam implementację różnych metod wykorzystywanych do sprawdzania naszych wyników, oraz np. oczekiwanych wyjątków.

Podsumowanie

Jak widzicie w prosty sposób można testować aplikacje Xamarin.Forms z użyciem xUnit. Kolejny punkt na liście projektu 10Things to dodanie źródła danych offline z wykorzystaniem bazy SQLite lub Realm.

Tutaj pytanie do czytelników, która baza oferuje lepszy mechanizm synchronizacji offline-online.

Podsumowanie tygodnia odc.5

Podsumowanie tygodnia odc.5

A więc mamy już piątek 21.04 więc czas na podsumowanie tygodnia odc.5. Za nami siódmy tydzień zmagań w Daj Się Poznać. A więc czas na garść moich sukcesów i porażek minionego tygodnia, oraz kilka linków które wydały mi się ciekawe.

Podsumowanie tygodnia odc.5

Co się udało

Tutaj niestety sukcesów brak projekt nie drgnął nawet o milimetr z blogiem niestety też jest ostatnio cienko.

Co się nie udało

Patrz punkt wyżej

Ciekawe linki tygodnia

Podsumowanie

Na dzisiaj byłoby to tylko tyle albo i aż.

Podsumowanie tygodnia odc.4

Podsumowanie tygodnia odc.4

A więc mamy już piątek 31.03 poniedziałek 03.04 więc czas na podsumowanie tygodnia odc.4. Za nami czwarty tydzień zmagań w Daj Się Poznać. A więc czas na garść moich sukcesów i porażek minionego tygodnia, oraz kilka linków które wydały mi się ciekawe.

Podsumowanie tygodnia odc.4

Co się udało

  • Podłączyć testy xUnit – 10Things idzie powoli do przodu. Podłączyłem takie trochę Hello World w xUnit do aplikacji.
  • Refactor – Kolejny ważny punkt na liście, zmieniłem namespace i nazwy projektów na bardziej „ludzkie”.

Co się nie udało

  • 10Things – Idzie to zdecydowanie za wolno

Ciekawe linki tygodnia

Różne

Podsumowanie

Na dzisiaj byłoby to tylko tyle albo i aż.