Rails有一个断言,在执行块后测试值的差异。来自这里
assert_difference 'Article.count', 1 do
post :create, article: {...}
end 此断言将执行post创建命令,并测试Article.count在执行块后是否增加了1。
Python或Django中是否有类似的断言?如果不是,最有效的实现是否只是存储数字,然后再得到它呢?
发布于 2013-07-29 07:58:28
显式比隐式好
这在本质上也是一样的。
pre_count = Article.objects.count()
# Your Logic
post_count = Article.objects.count()
self.assertEqual(post_count-pre_count, 1)或,对于额外的红宝石口味,
from django.utils.decorators import method_decorator
from contextlib import contextmanager
def ExtendedTestCase(TestCase):
@method_decorator(context_manager)
def assertDifference(self, func, diff, message=None):
" A Context Manager that performs an assert. "
old_value = func()
yield # `with` statement runs here. Roughly equivalent to ruby's blocks
new_value = func()
self.assertEqual(new_value-old_value, diff, message)
def ArticleTestCase(ExtendedTestCase):
def test_article_creation(self):
" Test that new articles can be created "
with self.assertDifference(Article.count, 1):
self.client.post("/article/new/", {
"title": "My First Django Article",
"content": "Boring Technical Content",
})https://stackoverflow.com/questions/17910007
复制相似问题