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

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?

1

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.

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);

        }

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