Pull to refresh
8
0
Перевернуть мир ИТ! @herodream

Консультант по развитию ИТ-команд

Send message
Предлагаю не давать пример читателю нарушения DRY и переписать код

       public AccountManagementController()
          :this(
             OrderManagerFactory.GetOrderManager(),
             UserManagerFactory.Get()
        )
        {
        }

        /// <summary>
        /// For testability
        /// </summary>
        /// <param name="accountData"></param>
        /// <param name="userManager"></param>
        public AccountManagementController(
            IAccountData accountData,
            IUserManager userManager)
        {
            _accountData = accountData;
            _userManager = userManager;
            _disabledAccountsFilter = new FilterParam("Enabled", Expression.Eq, true);
        }
С серьезным покрытием. Все тесты проходят.
...
Система надежно протестирована и сама рассказывает о себе путем тестов.

Думаю больше чем тесты важно бизнес-описание системы, какую ценность она приносит. И часто по проверкам функциональности нельзя точно восстановить почему сделано так, а зная бизнес-цель уже легче. В том числе написать с нуля. Документация и тесты не исключают, а дополняют друг друга. Имея только тесты придется восстанавливать бизнес-правила по ним и коду, догадываясь что здесь имелось в виду и что в бизнесе за этим скрывается.
Думаю 2 и 5 являются блоком arrange

class CalculatorTests
{
	public void Sum_2Plus5_7Returned()
	{
		// arrange
		var calc = new Calculator();
                var arg1 = 2;
                var arg2 = 5;
	
		// act
		var res = calc.Sum(arg1, arg2);

		// assert
		Assert.AreEqual(7, res);	
	}
}

Возможно для данного примера это излишне, но когда в метод передается объект в определенном состоянии, он будет предварительно дан, как и 2 и 5 по идее результаты предварительных вычислений.
Посмотрите внимательно 1-ый случай

1) Если группы равны, то фальшивая монета находится в третьей группе. Необходимо найти фальшивую монету из 4 монет за два взвешивания.

image
Авторское, но все хорошее изобретено до нас. Друзья сказали что подобные правила есть в «Совершенном» или в «Чистом» коде. Возможно видели там.
Решения имеют свои + и -. Это не догма. Если цель упростить за счет снижения уровня вложенности — return помогает. Если нет условий, которые можно явно отделить, лучше один return.
Если вы про второе правило, то в коде должен присутствоват возврат управления, например return.
Если есть условие вида:

if( 2*2 != 4 )
{
    print "наступил конец света"
}
else
{
    print "наступил мир во всем мире"
}


То лучше поменять ветки местами:
if( 2*2 == 4 )
{
    print "наступил мир во всем мире"
}
else
{
    print "наступил конец света"
}

Information

Rating
Does not participate
Location
Россия
Registered
Activity