Совет по стратегии написания теста - PullRequest
4 голосов
/ 26 марта 2009

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

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

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

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 ]

5 голосов
/ 26 марта 2009

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

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

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

3 голосов
/ 26 марта 2009

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

3 голосов
/ 26 марта 2009

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

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

3 голосов
/ 26 марта 2009

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

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

0 голосов
/ 26 марта 2013

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

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

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

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

...