Использование динамических с юнит-тестами - PullRequest
7 голосов
/ 29 марта 2011

Я видел несколько вопросов о том, как люди критикуют свои юнит-тесты.Мне кажется, они не закрываются, поэтому я хотел бы сделать то же самое.

Я набросал эти тесты, которые, как мне кажется, стали более удобочитаемыми с помощью dynamic, но мне было интересно, есть ли у кого-нибудь в SO-сообществе что-нибудь добавить.

Я знаю, как использоватьдинамика почему-то очень противоречива, и почему-то начинает религиозные войны среди разработчиков C #.Я действительно надеюсь избежать этого;Я просто пытаюсь написать несколько хороших тестов, которые помогут мне выполнить мою работу:)

    [TestMethod]
    public void TestAllocation() {
        SearchView.StubPropertyNumValueThenSetUpSearchView<WellDetail>("TX", Property.WorkingInterestTaxSubtypeId);
        Presenter.SetUpPhaseAndFmvValues(Phase.PhaseIdForForRenderAppraiser, 1000);

        AddTheseItems(
            new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 },
            new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 },
            new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 },
            new { PropNum = "pn1", CAN = "can1", MostRecentFmv = 10 },

            new { PropNum = "pn1", CAN = "can2", MostRecentFmv = 40 },
            new { PropNum = "pn1", CAN = "can2", MostRecentFmv = 40 },
            new { PropNum = "pn1", CAN = "can2", MostRecentFmv = 40 },

            new { PropNum = "pn2", CAN = "can1", MostRecentFmv = 50 },
            new { PropNum = "pn2", CAN = "can1", MostRecentFmv = 50 });

        Presenter.Process(SearchView, ItemsToProcess);

        AssertTheseItemsExist(
            new { NumberOfTimes = 4, PropNum = "pn1", CAN = "can1", FmvCalculated = 100 },
            new { NumberOfTimes = 3, PropNum = "pn1", CAN = "can2", FmvCalculated = 400 },
            new { NumberOfTimes = 2, PropNum = "pn2", CAN = "can1", FmvCalculated = 500 });
    }

    private void AddTheseItems(params dynamic[] MassUpdateDtos) {
        foreach(dynamic item in MassUpdateDtos)
            ItemsToProcess.Add(new MassFMVUpdateDTO(new WellDetail() { PropertyNum = item.PropNum, CountyAccountNum = item.CAN }, new FMVHistory(), 0, item.MostRecentFmv));
    }

    private void AssertTheseItemsExist(params dynamic[] uniqueTargets) {
        foreach (dynamic target in uniqueTargets)
            Assert.AreEqual(target.NumberOfTimes, ItemsToProcess.Count(f => f.PropertyNum == target.PropNum && f.CountyAccountNum == target.CAN && f.FMV == target.FmvCalculated));
    }

1 Ответ

2 голосов
/ 08 апреля 2011

Конечно, использование динамических сокращает количество строк кода, которые вам нужно использовать.Но сначала подумайте, что вы хотите от юнит-тестов.Вы хотите, чтобы они сообщали вам, где ваш код работает неправильно.

Если одна из строк данных, которые вы добавляете, неверна, сообщит ли вам, какая из них не удалась?И если одно из утверждений окажется неудачным, оно скажет вам, какое из них?

Пока вы можете получить необходимую информацию, у вас все будет хорошо.Поэтому он должен точно сказать, что пошло не так и когда это произошло.

...