Какой рефакторинг сделает этот метод тестируемым - PullRequest
1 голос
/ 04 июля 2011

так что у меня есть

 /// <summary>
        ///We cannot sell to someone who's address postcode is Channel Islands = GY 
        /// or Isle of Man = IM.
        /// So there are three possibilities... an unclear channel islands I.D. needs a pop up, an error or invalid country needs a pop up and a good match can display policyholder
        ///
        /// </summary>
        public void ValidateAddressCanPurchaseInsurance(PolicyHolder p)
        {
            if (p == null) {DisplayErrorPopup(@"Could not check address for this person - Dang!"); return;}

            var countryResult = IdentifyUnavailableAddresses(p);

            if (countryResult == UnavailableAddressMatch.UnmatchedChannelIslands) {DisplayErrorPopup("Couldn't determine whether this Channel Islands resident is Jersey or Guernsey based... fix postcode and retry application"); return;}
            if (countryResult == UnavailableAddressMatch.Guernsey || countryResult == UnavailableAddressMatch.IsleOfMan) { DisplayErrorPopup(countryResult); return;}
            if (countryResult == UnavailableAddressMatch.None) { DisplayPolicyHolder(p); return; }
            DisplayErrorPopup(String.Format("Something very odd has gone on while trying to validate the address of this person! {0}",p.MembershipNumber));
        }

Что я не могу на самом деле проверить ... Я, конечно, могу проверить IdentifyUnavailableAddresses () и сделать, но я хотел бы передать набор policyHolders этому методу и посмотретьчто он ведет себя так, как я ожидал.

Ошибка отображения дисплея примет перечисление UnavailableAddressMatch и отформатирует всплывающее сообщение или возьмет строку и поместит ее во всплывающее окно

Этот метод живетв классе, который определяет поведение формы Windows ...

Ответы [ 2 ]

2 голосов
/ 04 июля 2011

Я согласен со Шёрдом, что DisplayErrorPopUp не принадлежит этому классу. Но я бы пошел еще дальше и сказал, что звонок на DisplayErrorPopUp здесь тоже не относится. Я бы сказал, что этот метод должен генерировать исключение, а вызывающая сторона должна отлавливать и отображать сообщение об ошибке в зависимости от исключения. Возможно, вы захотите обработать исключение по-разному в разных представлениях.

Редактировать: Да, и вы проверяете, что метод выдает правильные исключения. Вам не нужно заботиться о DisplayErrorPopup, поскольку он проверяется в тестах представлений на предмет обработки различных исключений.

0 голосов
/ 04 июля 2011

ValidateAddressCanPurchaseInsurance - метод бизнес-уровня.DisplayErrorPopup это пользовательский интерфейс.Они не принадлежат к одному и тому же классу.

Помещение DisplayErrorPopup в другой класс позволяет поместить фиктивный объект в модульный тест и проверить, вызывается ли DisplayErrorPopup.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...