Используя эти Int32
тип требует ссылки пространства имен на System
, или полное определение (System.Int32
). Я склоняюсь к int
, потому что это не требует импорта пространства имен, поэтому уменьшая шанс конфликта пространства имен в некоторых случаях. Когда скомпилировано в IL, нет никакого различия между двумя.
Добрый день,
Изменить: Я только что быстро просмотрел первую главу книги « Искусство модульного тестирования », которая также доступна в виде бесплатного PDF-файла на веб-сайте книги . Это даст вам хороший обзор того, что вы пытаетесь сделать с помощью модульного теста.
Я предполагаю, что вы собираетесь использовать фреймворк типов xUnit. Вот некоторые начальные мысли высокого уровня:
Я буду добавлять больше пунктов, когда думаю о них.
HTH
Мне понадобится инструмент для отслеживания тех существующих классов, в которых существует testSuite, но для которых еще не написаны тесты, охватывающие другие функции-члены в классе. Таким образом, вы можете отслеживать, где в вашем тестовом покрытии есть дыры. Я говорю здесь на высоком уровне, где вы можете создать список классов и конкретных функций-членов, для которых в настоящее время не существует тестов. Здесь вам очень поможет стандартное соглашение об именах для тестов и testSuites.Я буду добавлять больше пунктов, когда думаю о них.
HTH
Мне понадобится инструмент для отслеживания тех существующих классов, в которых существует testSuite, но для которых еще не написаны тесты, охватывающие другие функции-члены в классе. Таким образом, вы можете отслеживать, где в вашем тестовом покрытии есть дыры. Я говорю здесь на высоком уровне, где вы можете создать список классов и конкретных функций-членов, для которых в настоящее время не существует тестов. Здесь вам очень поможет стандартное соглашение об именах для тестов и testSuites.Я буду добавлять больше пунктов, когда думаю о них.
HTH
Для тестирования графического интерфейса вы можете взглянуть на Selenium (как уже указал Игнас R) ИЛИ вы можете также взглянуть на этот инструмент: STIQ .
Удачи!
В некоторых случаях автоматическое тестирование может быть не очень хорошей идеей, особенно когда кодовая база грязная и PHP смешивает свое поведение с Javascript.
Было бы лучше начать с простого контрольного списка (со ссылками, чтобы сделать это быстрее) тестов, которые следует проводить (вручную) на предмете перед каждой доставкой.
При кодировании на минном поле трехлетней давности лучше защитите себя с помощью множества проверок ошибок. 15 минут, потраченных на написание правильного сообщения об ошибке для каждого случая, не будут потеряны.
Используйте метод соединения: соедините уродливую длинную функцию fold () с вызовом fnew (), которая является оболочкой для некоторых чистых классов, вызовите оба сверните и сравните результаты, запишите различия, загрузите код в производство и ждите своих рыбок. При этом всегда используйте один цикл рефакторинга,
Вы должны получить себе копию , эффективно работающую с устаревшим кодом . Это даст вам хорошее руководство о том, как вводить тесты в код, который не написан для тестирования.
TDD великолепен, но вам нужно начать с простого тестирования существующего кода, чтобы убедиться, что вносимые вами изменения не t изменить существующее требуемое поведение при внесении изменений.
Однако внедрение TDD сейчас значительно замедлит вас, прежде чем вы вернетесь к работе, потому что тесты модернизации, даже только в той области, которую вы меняете, будут усложнены, прежде чем простой.
С точки зрения планирования, я думаю, у вас есть три основных варианта:
. Первый подход может длиться намного дольше, чем вы ожидаете, и ваша видимая продуктивность пострадает. Если вы его используете, вам нужно будет заручиться поддержкой всех заинтересованных сторон. Однако вы можете использовать его, чтобы запустить процесс.
Проблема со вторым подходом состоит в том, что вы создаете различие между кодировщиками и разработчиками тестов. Кодировщики не будут чувствовать себя ответственными за сопровождение тестов. Я думаю, что этого подхода стоит избегать.
Третий подход является наиболее органичным, и он с самого начала вводит вас в разработку через тестирование. Накопление полезного корпуса модульных тестов может занять некоторое время. Медленный темп набора тестов на самом деле может быть преимуществом, поскольку дает вам время, чтобы научиться писать тесты.
Учитывая все обстоятельства, я думаю, что я бы выбрал скромный спринт в духе подхода 1, за которым следует приверженность подходу 3.
Для общих принципов модульного тестирования я рекомендую книгу xUnit Test Patterns: Refactoring Test Code Джерарда Месароса.
Просто чтобы добавить к другим отличным ответам, я согласен, что охват от 0% до 100% за один раз нереально, но вам обязательно следует добавлять модульные тесты каждый раз, когда вы исправляете ошибку .
Вы говорите, что существует довольно много ошибок и недовольных клиентов - Я был бы очень уверен в том, чтобы включить строгий TDD в процесс исправления ошибок, что намного проще, чем реализовать его в целом. После всего, если там действительно есть ошибка, которую нужно исправить, то создание теста, воспроизводящего ее, служит различным целям:
Представляем тесты для существующий проект сложен и, вероятно, будет долгим процессом, но выполнение их одновременно с исправлением ошибок - настолько идеальное время для этого (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и сделать лимонад из ваших отчетов об ошибках. : -)
затем создание теста, который воспроизводит его, служит различным целям:Внедрение тестов в существующий проект является трудным и, вероятно, долгим процессом, но делать их одновременно с исправлением ошибок - настолько идеальное время для этого (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и не сделать лимонад из ваших отчетов об ошибках. : -)
затем создание теста, который воспроизводит его, служит различным целям:Внедрение тестов в существующий проект является трудным и, вероятно, долгим процессом, но делать их одновременно с исправлением ошибок - настолько идеальное время для этого (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и не сделать лимонад из ваших отчетов об ошибках. : -)
Скорее всего, это минимальный тестовый пример, демонстрирующий, что проблема действительно существуетВнедрение тестов в существующий проект является трудным и, вероятно, долгим процессом, но проводить их одновременно с исправлением ошибок - такое идеальное время чтобы сделать это (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и не сделать лимонад из ваших отчетов об ошибках. : -)
Скорее всего, это минимальный тестовый пример, демонстрирующий, что проблема действительно существуетВнедрение тестов в существующий проект является трудным и, вероятно, долгим процессом, но проводить их одновременно с исправлением ошибок - такое идеальное время чтобы сделать это (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и не сделать лимонад из ваших отчетов об ошибках. : -)
Я буду знать наверняка, исправили ли ваши измененияВнедрение тестов в существующий проект является трудным и, вероятно, долгим процессом, но делать это одновременно с исправлением ошибок - это настолько идеальное время для этого (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и не сделать лимонад из ваших отчетов об ошибках. : -)
Я буду знать наверняка, исправили ли ваши измененияВнедрение тестов в существующий проект является трудным и, вероятно, долгим процессом, но делать это одновременно с исправлением ошибок - это настолько идеальное время для этого (параллельно с постепенным введением тестов в «нормальном» смысле), что было бы стыдно не воспользоваться этим шансом и не сделать лимонад из ваших отчетов об ошибках. : -)
sense), что было бы стыдно не рискнуть и не сделать лимонад из ваших отчетов об ошибках. : -) sense), что было бы стыдно не рискнуть и не сделать лимонад из ваших отчетов об ошибках. : -)Я использовал PHPUnit с хорошими результатами. PHPUnit, как и другие проекты, производные от JUnit, требует, чтобы тестируемый код был организован в классы. Если ваш проект не является объектно-ориентированным, вам необходимо начать рефакторинг непроцедурного кода в функции и функции в классы.
Я лично не использовал структуру JavaScript, хотя я бы мог представить, что эти структуры будут также требуют, чтобы ваш код был структурирован (по крайней мере) в вызываемые функции, если не в полноценные объекты.
Для тестирования приложений с графическим интерфейсом вы можете получить пользу от использования Selenium , хотя контрольный список, написанный программистом с хорошие инстинкты QA могут работать нормально. Я'
Внедрение фреймворка в большинстве случаев является сложной задачей, потому что вы как бы начинаете перестраивать свой старый код с некоторыми новыми твердыми частями фреймворка. Эти старые части должны начать общаться с фреймворком. Старые части должны получать некоторые обратные вызовы и возвращаемые состояния, тогда старые части должны каким-то образом указывать на это пользователю, и на самом деле у вас внезапно появляется две системы для тестирования.
Если вы говорите, что ваше приложение не так уж сложно, но оно стало из-за отсутствия тестирования, это может быть лучшим вариантом для восстановления приложения. Протестируйте некоторые распространенные фреймворки, такие как Zend, соберите свои требования, выясните, соответствует ли тестируемый фреймворк требованиям, и решите, стоит ли начинать заново.
Я не очень уверен в модульном тестировании, но NetBeans имеет встроенный набор модульного тестирования.
Если код действительно запутан, возможно, будет очень сложно выполнить какое-либо модульное тестирование. Только достаточно слабосвязанные и достаточно хорошо спроектированные компоненты могут быть легко протестированы. Однако в вашем случае функциональное тестирование может быть намного проще реализовать. Я бы рекомендовал взглянуть на Selenium . С помощью этого фреймворка вы сможете одновременно тестировать свой графический интерфейс и серверную часть. Однако, скорее всего, это не поможет вам отловить ошибки так хорошо, как при модульном тестировании.
Возможно, этот список поможет вам и вашим товарищам все реструктурировать: