首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Python / Django --是否有类似于Rails的assert_difference的断言?

Python / Django --是否有类似于Rails的assert_difference的断言?
EN

Stack Overflow用户
提问于 2013-07-28 15:49:29
回答 1查看 199关注 0票数 2

Rails有一个断言,在执行块后测试值的差异。来自这里

代码语言:javascript
复制
assert_difference 'Article.count', 1 do
  post :create, article: {...}
end  

此断言将执行post创建命令,并测试Article.count在执行块后是否增加了1。

Python或Django中是否有类似的断言?如果不是,最有效的实现是否只是存储数字,然后再得到它呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-29 07:58:28

显式比隐式好

这在本质上也是一样的。

代码语言:javascript
复制
pre_count = Article.objects.count()

# Your Logic

post_count = Article.objects.count()

self.assertEqual(post_count-pre_count, 1)

,对于额外的红宝石口味,

代码语言:javascript
复制
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",
             })
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17910007

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档