Как я иду об установке процесса разработки TDD с Google App Engine?

Вы можете, использовал именованную идиому конструктора:

public class Thing
{
    private string connectionString;

    private string filename;

    private Thing()
    {
        /* Make this private to clear things up */
    }

    public static Thing WithConnection(string connectionString)
    {
        var thing = new Thing();
        thing.connectionString = connectionString;
        return thing;
    }

    public static Thing WithFilename(string filename)
    {
        var thing = new Thing();
        thing.filename = filename;
        return thing;
    }
}
15
задан Bob Aman 20 October 2009 в 00:36
поделиться

3 ответа

В моем проекте GAE я использую:

  • NoseGAE - это критическая часть, которая связывает все остальное вместе
  • Mock, как в отличном ответе Джона. Я использую это в основном для AWS и других веб-сервисов
  • Fixture (пакет, а не идея)

Я также предпочитаю многие идиомы Rails. Я разбил свои тесты на модульные и функциональные, используя пакеты Python. Вы можете запустить подмножество тестов, используя - tests = unit или - tests = financial . Все это немного более ручное, чем Rails, но, по крайней мере, я могу выполнить единичное тестирование сложных вещей и убедиться, что у меня никогда не будет регрессий.

Я также сделал простой класс FunctionalTest , чтобы делать большую часть очень распространенных действия в Rails, такие как assert_response и assert_xpath (аналогично assert_select).

class FunctionalTest(Test):
  def get(self, *args, **kw):
    self.response = app.get(*args, **kw)

  def post(self, *args, **kw):
    self.response = app.post(*args, **kw)

  def assert_response(self, expected):
    pattern = str(expected) if re.search(r'^\d+$', expected) \
                            else (r'^\d+ %s' % expected)
    assert re.search(pattern, self.response.status, re.IGNORECASE), \
           'Response status was not "%s": %s' % (expected, self.response.status)

  def assert_xpath(self, path, expected):
    element = ElementTree.fromstring(self.response.body)
    found_nodes = element.findall('.' + path)
    if type(expected) is int:
      assert_equal(expected, len(found_nodes))
    elif type(expected) is str or type(expected) is unicode:
      assert (True in [(node.text == expected) for node in found_nodes])
    else:
      raise Exception, "Unknown expected value: %r" % type(expected)

Если вы выполняете много поисков на соответствие ListElement, обязательно изучите синтаксис - tests = foo , потому что проверка соответствия элементов в списке выполняется очень медленно.

Иногда мне нравится загружать Rails console с данными моего прибора, чтобы увидеть, что происходит в тестовой среде (например, скрипт / тест консоли ). Чтобы сделать что-то подобное с GAE, запустите dev_appserver.py с параметром - datastore_path = "$ TMPDIR / nodegae.datastore" (или, возможно, замените / tmp на $ TMPDIR .

сценарий / консольный тест ). Чтобы сделать что-то подобное с GAE, запустите dev_appserver.py с параметром - datastore_path = "$ TMPDIR / nodegae.datastore" (или, возможно, замените / tmp на $ TMPDIR .

сценарий / консольный тест ). Чтобы сделать что-то подобное с GAE, запустите dev_appserver.py с параметром - datastore_path = "$ TMPDIR / nodegae.datastore" (или, возможно, замените / tmp на $ TMPDIR .

15
ответ дан 1 December 2019 в 00:41
поделиться

Я не использовал App Engine, но мне кажется, что самые популярные инструменты тестирования Python - это

  • unittest / doctest - это пакеты тестирования из стандарта Python. библиотека. unittest - это xUnit для Python.
  • Нос - средство запуска / поиска тестов. У него много опций, в том числе - с покрытием , которое использует покрытие , чтобы обеспечить покрытие кода. отчеты.
  • pylint - самая функциональная программа проверки линта для Python. Полезно за пределами средство проверки синтаксиса, поскольку оно сообщает о неиспользуемых переменных / функциях, когда методы должны быть функциями и т. д.
  • pester (тестирование мутаций)
  • buildbot (непрерывная интеграция)

Возможно, вы захотите сослаться на этот (не совсем полный) список ] Python Инструменты тестирования .

Для BDD поле было тонким, когда я последний раз проверял. Многие из настоящих инструментов BDD не могли использоваться с носом и / или слишком ограничивали требуемый синтаксис. Возможно, вам повезет с spec , который представляет собой BDD-подобный носовой плагин. Только что нашел pyccuracy , который очень похож на огурец, но я не нашел пробовал.

Как бы то ни было, я сейчас просто использую Ностесты -v (бегун по носу с --verbose), который будет использовать первую строку строки документации в средстве выполнения тестов. output. That is, given a test like:

class TestFoo(unittest.TestCase):
    def testAnyNameHere(self):
        """ Foo should be bar"""
        foo = "bar"
        self.assertEqual(foo, 'bar')

nosetests will give:

$ nosetests -v
Foo should be bar... ok

-----------------------------
Ran 1 tests in 0.002s
OK
3
ответ дан 1 December 2019 в 00:41
поделиться

Вы не всегда найдете один к одному эквиваленты инструментов тестирования Ruby в Python, но в Python есть несколько отличных инструментов тестирования. Некоторые из инструментов, которые я нашел полезными, включают:

  • unittest - инструмент xUnit, включенный в стандартную библиотеку Python. Он включает в себя все основы модульного тестирования.
  • doctest - отличная часть стандартной библиотеки, она позволяет писать тесты в строках документации функций, классов, модулей, методов. Он отлично передает предполагаемое использование API. Ян Бикинг предлагает использовать doctest для разработки, управляемой поведением. Doctest очень хорошо вписывается в систему документации Sphinx (вы можете убедиться, что все примеры в вашей документации проходят каждый раз, когда вы создаете документы).
  • нос и py. test рассматриваются как версии unittest следующего поколения. Они могут запускать все существующие случаи модульного тестирования, но допускают более простые модульные тесты, не основанные на классах. py.test также допускает распределенное выполнение.
  • mock - хорошая библиотека для имитации поведения.
  • tdaemon следит за каталогом на предмет обновлений вашего кода и повторно выполнит ваш набор тестов. (моя личная ветка содержит несколько не связанных улучшений).
  • Buildbot , Bitten и даже Hudson - все они работают как полноценные, непрерывные серверы интеграции для кода Python.
  • extension.py вычисляет покрытие кода вашего кода.
  • pylint предоставит анализ вашего кода в стиле линта, убедившись, что он соответствует общим соглашениям о кодировании и не содержит общих ошибок. Также есть " включая Twill , Selenium и Windmill .

Если вы используете Django в App Engine, он включает несколько расширений для модульного тестирования которые позволяют моделировать HTTP-клиент и постоянство базы данных.

Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны . Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).

Удачного тестирования!

включая Twill , Selenium и Windmill .

Если вы используете Django в App Engine, он включает несколько расширений для модульного тестирования которые позволяют моделировать HTTP-клиент и постоянство базы данных.

Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны . Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).

Удачного тестирования!

Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны. Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).

Удачного тестирования!

Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны. Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).

Удачного тестирования!

26
ответ дан 1 December 2019 в 00:41
поделиться
Другие вопросы по тегам:

Похожие вопросы: