Jak najlepiej testować Eventy w obrębie jednej klasy?

Odpowiedz Nowy wątek
2019-07-07 04:13
0

Jak chodzi o testowanie delegatów między modelami widoku to wykorzystuję bibliotekę Prism.Core.

Może to dla wielu się wydawać czymś oczywistym lub pytanie może być głupie, ale lepiej zadać głupie pytanie niż radzić sobie później z głupim kodem ;p

Ciekaw jestem czy wykorzystanie EventAggregator w obrębie jednej testowanej klasy nie będzie przerostem formy nad treścią?

Jak Wy to robicie?

edytowany 2x, ostatnio: bakunet, 2019-07-07 04:38

Pozostało 580 znaków

2019-07-08 10:41

Jeśli chodzi o testowanie Eventów, to ja sobie zrobiłem coś takiego banalnego i myślę, że większość używa takiego właśnie mechanizmu:

MyItem item = new MyItem();

bool eventFired = false;
item.EventToTest += (s, e) => eventFired = true;

item.DoSomeWork();

Assert.IsTrue(eventFired);

Tutaj tworzymy event handlera, który po prostu ma ustawić wartość zmiennej. Potem wywołujemy metodę, która powinna wywołać dany event. I tyle.

Pozostało 580 znaków

2019-07-09 10:01
0
Juhas napisał(a):

Jeśli chodzi o testowanie Eventów, to ja sobie zrobiłem coś takiego banalnego i myślę, że większość używa takiego właśnie mechanizmu:

MyItem item = new MyItem();

bool eventFired = false;
item.EventToTest += (s, e) => eventFired = true;

item.DoSomeWork();

Assert.IsTrue(eventFired);

Tutaj tworzymy event handlera, który po prostu ma ustawić wartość zmiennej. Potem wywołujemy metodę, która powinna wywołać dany event. I tyle.

Dziękuję, podejście wygląda ciekawie. Jako że zdecydowałem się wszędzie pozastępować delegaty Prismowym EventAggregator, to po prostu testowałem zmiany we własnościach klasy które miały nastąpić po publikacji eventu. Co myślisz o takim podejściu? (przykłady poniżej)

[Fact]
        public void DataUpdateEvent_Publish_UpdatesDataUpdateModulesProperty()
        {
            UpdateModules update = new UpdateModules()
            {
                RacesPl = true,
                HCzFrom = 20
            };

            _dataUpdateEvent.Publish(update);

            Assert.True(_viewModel.DataUpdateModules.RacesPl);
            Assert.Equal(20, _viewModel.DataUpdateModules.HCzFrom);
            Assert.Equal(update, _viewModel.DataUpdateModules);
        }

        [Fact]
        public void LoadDataEvent_Publish_LoadsData()
        {
            _viewModel.Horses.Clear();
            _viewModel.Jockeys.Clear();
            _viewModel.Races.Clear();

            _loadDataEvent.Publish();

            Assert.NotEmpty(_viewModel.Horses);
            Assert.NotEmpty(_viewModel.Jockeys);
            Assert.NotEmpty(_viewModel.Races);
        }

        [Fact]
        public void ProgressBarEvent_Publish_UpdatesProperties()
        {
            ProgressBarData bar = new ProgressBarData()
            {
                JobType = "unit test",
                LoopCouner = 100,
                FromId = 10,
                ToId = 1010
            };

            _progressBarEvent.Publish(bar);

            Assert.Equal(10, _viewModel.UpdateStatusBar);
            Assert.Equal("unit test", _viewModel.WorkStatus);
            Assert.Equal("100 / 1000", _viewModel.ProgressDisplay);

        }
edytowany 1x, ostatnio: bakunet, 2019-07-09 10:02
Nie znam PRISM, więc nie wypowiem się, ale wygląda ok na pierwszy rzut oka :) Swoją drogą nie za bardzo wiem, co tu testujesz. - Juhas 2019-07-09 10:47

Pozostało 580 znaków

Odpowiedz
Liczba odpowiedzi na stronę

1 użytkowników online, w tym zalogowanych: 0, gości: 1, botów: 0