我的Python代码中有一些相对复杂的集成测试.我用自定义装饰器大大简化了它们,我对结果非常满意.这是我的装饰器看起来像一个简单的例子:
def specialTest(fn):
    def wrapTest(self):
        #do some some important stuff
        pass
    return wrapTest
Run Code Online (Sandbox Code Playgroud)
这是测试的样子:
class Test_special_stuff(unittest.TestCase):
    @specialTest
    def test_something_special(self):
        pass
Run Code Online (Sandbox Code Playgroud)
这很好用,并且由PyCharm的测试运行器执行没有问题.但是,当我使用Nose从命令行运行测试时,它会使用@specialTest装饰器跳过任何测试.我试图将装饰器命名为testSpecial,因此它匹配默认规则,但我的FN参数不会被传递.
我如何让Nose执行这些测试方法并按照预期处理装饰器?
感谢madjar,我通过重构我的代码看起来像这样,使用functools.wraps并更改包装器的名称:
from functools import wraps
def specialTest(fn):
    @wraps(fn)
    def test_wrapper(self,*args,**kwargs):
        #do some some important stuff
        pass
    return test_wrapper
class Test_special_stuff(unittest.TestCase):
    @specialTest
    def test_something_special(self):
        pass
Run Code Online (Sandbox Code Playgroud) 这里有一些争论,哪个更适合从其他项目引用我们的公共代码库:通过项目或汇编.我赞成引用该项目,特别是因为我们有自动化的单元测试,证明公共代码能够满足它的需要.
另一个阵营的想法是锁定那些项目,每月只发布一次或类似的东西.然后强制所有项目引用程序集.他们认为这将保护他们免于部署未经测试的代码.他们"太忙"无法编写自动化单元测试并将其项目配置为持续集成,我对此没有任何影响,所以请不要关注这方面.
这就是我能想到为什么项目参考是更好的解决方案的原因.我也在寻找其他意见.
优点:
缺点:
我是一个C#dev进入一些Python的东西,所以我不知道我现在在做什么.我已经读过你不需要使用Python的依赖注入.我被告知你可以在代码中实例化对象并让它们以你想要的方式运行,但是,你可以将这些对象上的方法指向我自己的测试中定义的存根 - 据说没有模拟.
这是真的?我试过这样做,并不能让它工作.这实际上是怎么做到的?如何在没有模拟库的情况下在Python中存根方法?
我在PY有一个装饰师.它是一种方法,并将该函数作为参数.我想基于传递的函数创建一个基于目录的结构.我正在使用父目录的模块名称,但是想使用类名作为子目录.我无法弄清楚如何获取拥有fn对象的类的名称.
我的装饰者:
def specialTest(fn):
    filename = fn.__name__
    directory = fn.__module__
    subdirectory = fn.__class__.__name__ #WHERE DO I GET THIS
Run Code Online (Sandbox Code Playgroud) 我正在使用SQL Alchemy并且有一些特定于帐户的模式.模式的名称是使用帐户ID派生的,因此在我访问应用程序服务或存储库层之前,我没有模式的名称.我想知道是否可以针对在运行时动态设置其架构的实体运行查询?
我知道我需要设置__table_args__['schema']并尝试使用内置的type(),但我总是得到以下错误:
could not assemble any primary key columns for mapped table
Run Code Online (Sandbox Code Playgroud)
我已经准备好放弃直接编写sql,但我真的很讨厌这样做.知道如何做到这一点?我正在使用SA 0.99而且我确实有PK映射.
谢谢
我使用的是SA 0.6.6,Python 2.66和Postgres 8.3.
我有一些查询需要一些可以通过WITH RECURSIVE查询处理的复杂安全检查.我想要做的是将文本查询与查询对象结合起来,以便我可以根据需要应用过滤器.
我最初的想法是将我的文本查询创建为子查询,然后将其与用户的查询和过滤器相结合.不幸的是,这不起作用.
subquery = session.query(sharedFilterAlias).\
                   from_statement(sharedFilterQuery).subquery()
Run Code Online (Sandbox Code Playgroud)
这会导致此错误:
AttributeError: 'Annotated_TextClause' object has no attribute 'alias'
Run Code Online (Sandbox Code Playgroud)
反正将文本查询与SQLAlchemy的查询对象结合起来了吗?