小编nsf*_*n55的帖子

Python从导入的模块中模拟一个函数

我想了解如何@patch从导入的模块中获取函数.

这是我到目前为止的地方.

应用程序/ mocking.py:

from app.my_module import get_user_name

def test_method():
  return get_user_name()

if __name__ == "__main__":
  print "Starting Program..."
  test_method()
Run Code Online (Sandbox Code Playgroud)

应用程序/ my_module/__ init__.py:

def get_user_name():
  return "Unmocked User"
Run Code Online (Sandbox Code Playgroud)

测试/ mock-test.py:

import unittest
from app.mocking import test_method 

def mock_get_user():
  return "Mocked This Silly"

@patch('app.my_module.get_user_name')
class MockingTestTestCase(unittest.TestCase):

  def test_mock_stubs(self, mock_method):
    mock_method.return_value = 'Mocked This Silly')
    ret = test_method()
    self.assertEqual(ret, 'Mocked This Silly')

if __name__ == '__main__':
  unittest.main()
Run Code Online (Sandbox Code Playgroud)

这并没有工作,我期望的那样."patched"模块只返回unmocked值get_user_name.如何从我导入到测试命名空间的其他包中模拟方法?

python unit-testing python-mock python-unittest

95
推荐指数
2
解决办法
5万
查看次数

Flask-WTF - validate_on_submit()永远不会执行

我正在使用Flask-WTF:

这是我的表格:

from flask.ext.wtf import Form, TextField

class BookNewForm(Form):
    name = TextField('Name')
Run Code Online (Sandbox Code Playgroud)

这是控制器:

@book.route('/book/new', methods=['GET', 'POST'])
def customers_new():
    form = BookNewForm()
    if form.is_submitted():
        print "submitted"
    if form.validate():
        print "valid"
    if form.validate_on_submit():
        flash("Successfully created a new book")
        return redirect(url_for('.books_show'))
    return render_template('views/books_new.html', form=form)
Run Code Online (Sandbox Code Playgroud)

现在的问题是,如果你查看我的print语句,它总是打印提交,但它永远不会打印有效,并且从不执​​行validate_on_submit().为什么?

python forms validation flask wtforms

29
推荐指数
2
解决办法
3万
查看次数

24
推荐指数
5
解决办法
4万
查看次数

可变性和春天

我目前正在一家大量使用Spring Dependency Injection的商店里重读"Effective Java".在阅读布洛赫的书时,人们不禁会发现他对课堂不变性的强调(他多次表示课程应尽可能不变).我不禁感到这与Spring Dependency Injection(以及大多数DI引擎)对javabeans标准的依赖直接冲突.阅读"Spring in Action"关于DI的章节似乎会让Bloch畏缩他们的可变类,这些类由在你职权范围之外实例化的对象组成,这些对象本身就是可变的.

是不是Bloch的想法对于Spring来说太新颖了?Spring模型被破坏了吗?Bloch对不变性的立场是否仅适用于编写库代码?在编写Spring代码时,我应该编写带有大量getter和setter的灵活对象,还是在构造函数中加载所有内容?

java spring immutability

21
推荐指数
2
解决办法
6004
查看次数

Flask WTForms:DataRequired和InputRequired之间的区别

有什么区别DataRequiredInputRequiredwtforms.valiadators

我的注册表单中有一些字段:

username
password 
password_repeat 
submit
Run Code Online (Sandbox Code Playgroud)

这些字段应该使用DataRequired还是InputRequired验证器?

python flask wtforms flask-wtforms

19
推荐指数
1
解决办法
6595
查看次数

Flask-SQLAlchemy:如何有条件地插入或更新行

我的应用程序使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2的组合.

在目前的版本中,我有一个设置表.该表只有一个记录,包含一个字段.最初该表包含零记录.

我想要实现的是:

  • 假设db中没有条目,则显示准备用户输入的空表单
  • 鉴于存在条目,显示条目,和
  • 如果用户更改了值,则更新db中的rec.

这是我的代码:

models.py

class Provider(db.Model):
    id = db.Column(db.Integer, primary_key = True)
    rssfeed = db.Column(db.String(120), unique = True)

    def __init__(self, rssfeed):
        self.rssfeed = rssfeed

    def __repr__(self):
        return '<NZBMatrix feed url %r>' % self.rssfeed
Run Code Online (Sandbox Code Playgroud)

forms.py

class SettingsForm(Form):
    rssfeed = TextField('rssfed', validators= [Required()])
Run Code Online (Sandbox Code Playgroud)

views.py

    @app.route('/settings', methods=["GET","POST"])
    def settings():
    """ show settings """
        provider = Provider.query.get(1)
        form = SettingsForm(obj=provider)
        print provider

        if request.method == "POST" and form.validate():
            if Provider.query.get(1) is None:
                provider = Provider(rssfeed=form.rssfeed.data)
                form.populate_obj(provider)
                db.session.add(provider)
                db.session.commit()
                flash("Settings added") …
Run Code Online (Sandbox Code Playgroud)

python flask wtforms flask-sqlalchemy flask-wtforms

18
推荐指数
2
解决办法
3万
查看次数

杰克逊JSON,不可变类和接口

我正在使用Jackson示例,并且在使用不可变类和接口进行反序列化时遇到一些麻烦.

以下是我的代码:

package com.art.starter.jackson_starter;

import java.io.IOException;
import java.io.StringReader;
import java.io.StringWriter;

import org.codehaus.jackson.JsonGenerationException;
import org.codehaus.jackson.map.JsonMappingException;
import org.codehaus.jackson.map.ObjectMapper;
/**  * Hello world!  *  */ public class App  {
    public static void main( String[] args ) throws JsonGenerationException, JsonMappingException, IOException
    {
        System.out.println( "Hello World!" );

        AddressImpl.AddressBuilder builder = new AddressImpl.AddressBuilder();
        NameImpl.Builder nameBuilder = new NameImpl.Builder();
        UserImpl.Builder userBuilder = new UserImpl.Builder();


        Name name = nameBuilder.first("FirstName")
                  .last("LastName")
                  .build();

        Address address =  builder.setCity("TestCity")
               .setCountry("TestCountry")
               .setState("PA")
               .setStreet("TestAddress")
               .setZip(123)
               .build();      

        User user = userBuilder.address(address)
                 .gender(User.Gender.MALE)
                 .isVerified(true)
                 .userImage(new byte[5]) …
Run Code Online (Sandbox Code Playgroud)

java json interface immutability jackson

17
推荐指数
1
解决办法
3万
查看次数

确定django中的属性是否为"DeferredAttribute"

上下文


我在Django Cache Machine中找到了一个相当关键的错误,它导致它的失效逻辑在从Django 1.4升级到1.7后失去了理智.

该错误本地化为only()扩展缓存机器的模型的调用CachingMixin.它导致深度递归,偶尔会破坏堆栈,但否则会产生巨大的flush_lists缓存机器用于模型的双向失效ForeignKey关系中.

class MyModel(CachingMixin):
    id = models.CharField(max_length=50, blank=True)
    nickname = models.CharField(max_length=50, blank=True)
    favorite_color = models.CharField(max_length=50, blank=True)
    content_owner = models.ForeignKey(OtherModel)
Run Code Online (Sandbox Code Playgroud)
m = MyModel.objects.only('id').all()
Run Code Online (Sandbox Code Playgroud)

错误


该错误发生在以下行中(https://github.com/jbalogh/django-cache-machine/blob/f827f05b195ad3fc1b0111131669471d843d631f/caching/base.py#L253-L254).在这种情况下,self是一个MyModel混合了延迟和未延迟属性的实例:

    fks = dict((f, getattr(self, f.attname)) for f in self._meta.fields
                if isinstance(f, models.ForeignKey))
Run Code Online (Sandbox Code Playgroud)

Cache Machine跨ForeignKey关系执行双向失效.它通过循环遍历a中的所有字段来实现Model并在缓存中存储一​​系列指针来指针指向当有问题的对象无效时需要无效的对象.

only()在Django ORM中的使用做了一些元编程魔术,它通过Django的DeferredAttribute实现覆盖了无法获取的属性.在正常情况下,访问favorite_color将调用DeferredAttribute.__get__(https://github.com/django/django/blob/18f3e79b13947de0bda7c985916d5a04e28936dc/django/db/models/query_utils.py#L121-L146)并从结果缓存中获取属性或数据源.它通过获取有问题的未延迟表示Modelonly()在其上调用另一个查询来完成此操作.

这是循环遍历外键Model并访问其值时的问题,Cachine Machine引入了无意的递归.getattr(self, …

python django django-models django-orm django-cache-machine

17
推荐指数
2
解决办法
7542
查看次数

Python unittest mock:是否可以在测试时模拟方法的默认参数的值?

我有一个接受默认参数的方法:

def build_url(endpoint, host=settings.DEFAULT_HOST):
    return '{}{}'.format(host, endpoint)
Run Code Online (Sandbox Code Playgroud)

我有一个运行此方法的测试用例:

class BuildUrlTestCase(TestCase):
    def test_build_url(self):
        """ If host and endpoint are supplied result should be 'host/endpoint' """

        result = build_url('/end', 'host')
        expected = 'host/end'

        self.assertEqual(result,expected)

     @patch('myapp.settings')
     def test_build_url_with_default(self, mock_settings):
        """ If only endpoint is supplied should default to settings"""
        mock_settings.DEFAULT_HOST = 'domain'

        result = build_url('/end')
        expected = 'domain/end'

        self.assertEqual(result,expected)
Run Code Online (Sandbox Code Playgroud)

如果我删除调试点build_url并检查此属性settings.DEFAULT_HOST将返回模拟值.但是测试继续失败,断言指示host从我的实际值中分配值settings.py.我知道这是因为host关键字参数是在导入时设置的,我的模拟不被考虑.

调试器

(Pdb) settings
<MagicMock name='settings' id='85761744'>                                                                                                                                                                                               
(Pdb) settings.DEFAULT_HOST
'domain'
(Pdb) host
'host-from-settings.com'                                                                                                                                                 
Run Code Online (Sandbox Code Playgroud)

有没有办法在测试时覆盖此值,以便我可以使用模拟 …

python mocking python-unittest

12
推荐指数
3
解决办法
3323
查看次数

Flask-Admin ModelView中的只读文本字段

如何在ModelViewreadonly 上创建一个字段?

class MyModelView(BaseModelView):
    column_list = ('name', 'last_name', 'email')
Run Code Online (Sandbox Code Playgroud)

python flask flask-sqlalchemy flask-admin

11
推荐指数
5
解决办法
7976
查看次数