Совет по стратегии написания теста

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

Вот пример решения, с которым я сейчас сталкиваюсь...

У меня есть три класса...

public class User
{
    public string Username { get; set; }
    public List<Favorite> Favorties { get; set; }
}

public class Favorite
{
    public string Username { get; set; }
    public int rank { get; set; }
}

public class UserManager
{
    public List<Favorite> GetTop5(User user)
    {
        var qry = from fav in user.Favorties.OrderBy(f => f.rank)
                  select fav;

        return qry.Take<Favorite>(5).ToList();
    }
}

У меня есть уровень доступа к данным для класса User, для которого у меня уже есть тестовая настройка "GetUser". Как вы можете видеть, в моей бизнес-логике у меня есть метод UserManager.GetTop5(), который возвращает топ-5 избранного для пользователя, которого я только что вытащил из БД. Этот метод очень прост и в настоящее время не включает никаких внешних ресурсов или зависимостей.

Поэтому мой вопрос заключается в том, хотите ли вы написать еще один тест для этой функциональной точки "GetTop5", даже если вероятность сбоя очень мала?

Вы настраиваете тест в любом случае на случай, если вы расширите функциональность в будущем? Или вы думаете, что тест здесь чрезмерен?

5 ответов

Решение

Вы не поверите, но вот что сказал Кент Бек, прямо здесь, на Stackru:

"Мне платят за код, который работает, а не за тесты, поэтому моя философия заключается в том, чтобы как можно меньше тестировать, чтобы достичь заданного уровня достоверности (я подозреваю, что этот уровень достоверности высок по сравнению с отраслевыми стандартами, но это может быть просто высокомерие"). Если я обычно не совершаю какую-то ошибку (например, устанавливаю неправильные переменные в конструкторе), я не проверяю это ".

Ссылка: Ссылка:

При выполнении TDD я пишу по крайней мере один модульный тест для каждой функции.

Итак, GetTop5 это функция? если так, то это заслуживает испытания. Если это не особенность, то она не должна существовать;-)

Да, я бы также написал тест для этого метода, в общем, у вас должен быть тест для реализуемой вами функции. Помните, что TDD предназначен не только для тестирования, если метод работает, вы также должны проверить, как он обрабатывает исключения, например, что должно было произойти, если он получил Null как пользовательский объект.

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

Хороший момент с написанием теста потом! Если вы сначала реализуете функции, а затем тестируете их, это кажется странным. Вот почему вы должны сначала написать тесты, а затем реализовать функции. Более того, это заставит вас задуматься о том, как вы хотите использовать свои функции. Кроме того, если вы впервые реализуете то, что хотите реализовать, вы окажетесь в ситуациях, когда код все равно сложно протестировать. И снова в этом помогает первый подход к тестированию, код будет более тестируемым, если вы начнете с реализации тестов до фактической реализации ваших функций.

Я проверяю большинство вещей.

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

Я не проверяю реализацию, хотя. Я хочу иметь возможность изменять реализацию, не меняя свои тесты.

Я использовал TDD, возможно, год или два, так что, возможно, я повзрослею и перестану. Пока что я все еще учусь и думаю, что не пишу достаточно тестов.

Другие вопросы по тегам