Чтобы помочь моей команде написать тестовый код, я придумал этот простой список лучших практик, чтобы сделать нашу базу кода С# более пригодной для тестирования. (Некоторые из пунктов относятся к ограничениям Rhino Mocks, насмешливой структуре для С#, но правила могут применяться и в более общем плане.) Есть ли у кого-нибудь лучшие методы, которыми они следуют?
Чтобы максимизировать проверяемость кода, следуйте этим правилам:
-
Сначала напишите тест, затем код. Причина. Это гарантирует, что вы напишите тестовый код и что каждая строка кода получает тесты, написанные для него.
-
Классы проектирования с использованием инъекции зависимостей. Причина: вы не можете издеваться или тестировать то, что не видно.
-
Разделите код пользовательского интерфейса от его поведения с помощью Model-View-Controller или Model-View-Presenter.. Причина. Позволяет тестировать бизнес-логику в то время, когда части, которые не могут быть протестированы (UI) минимизирован.
-
Не писать статические методы или классы. Причина: Статические методы трудно или невозможно изолировать, а Rhino Mocks не может их высмеять.
-
Программные интерфейсы, а не классы. Причина. Использование интерфейсов разъясняет отношения между объектами. Интерфейс должен определить сервис, который требуется объекту из его среды. Кроме того, интерфейсы можно легко высмеять, используя Rhino Mocks и другие издевательские рамки.
-
Изолировать внешние зависимости. Причина: нерешенные внешние зависимости не могут быть протестированы.
-
Пометить как виртуальные методы, которые вы собираетесь издеваться. Причина: Rhino Mocks не может издеваться над не виртуальными методами.