Вы можете, использовал именованную идиому конструктора:
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;
}
}
В моем проекте GAE я использую:
Я также предпочитаю многие идиомы 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
. Я не использовал App Engine, но мне кажется, что самые популярные инструменты тестирования Python - это
- с покрытием
, которое использует покрытие , чтобы обеспечить покрытие кода.
отчеты. Возможно, вы захотите сослаться на этот (не совсем полный) список ] 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
Вы не всегда найдете один к одному эквиваленты инструментов тестирования Ruby в Python, но в Python есть несколько отличных инструментов тестирования. Некоторые из инструментов, которые я нашел полезными, включают:
Если вы используете Django в App Engine, он включает несколько расширений для модульного тестирования которые позволяют моделировать HTTP-клиент и постоянство базы данных.
Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны . Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).
Удачного тестирования!
включая Twill , Selenium и Windmill .Если вы используете Django в App Engine, он включает несколько расширений для модульного тестирования которые позволяют моделировать HTTP-клиент и постоянство базы данных.
Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны . Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).
Удачного тестирования!
Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны. Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).
Удачного тестирования!
Есть масса других инструментов, которые я не использовал (например, PySpec и Behavior ), которые также могут быть полезны. Я не видел в Python никаких инструментов для тестирования мутаций, но держу пари, что они есть (я бы хотел узнать, что это такое).
Удачного тестирования!