我想了解如何@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.如何从我导入到测试命名空间的其他包中模拟方法?
我正在使用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().为什么?
我目前正在一家大量使用Spring Dependency Injection的商店里重读"Effective Java".在阅读布洛赫的书时,人们不禁会发现他对课堂不变性的强调(他多次表示课程应尽可能不变).我不禁感到这与Spring Dependency Injection(以及大多数DI引擎)对javabeans标准的依赖直接冲突.阅读"Spring in Action"关于DI的章节似乎会让Bloch畏缩他们的可变类,这些类由在你职权范围之外实例化的对象组成,这些对象本身就是可变的.
是不是Bloch的想法对于Spring来说太新颖了?Spring模型被破坏了吗?Bloch对不变性的立场是否仅适用于编写库代码?在编写Spring代码时,我应该编写带有大量getter和setter的灵活对象,还是在构造函数中加载所有内容?
有什么区别DataRequired和InputRequired在wtforms.valiadators
我的注册表单中有一些字段:
username
password
password_repeat
submit
Run Code Online (Sandbox Code Playgroud)
这些字段应该使用DataRequired还是InputRequired验证器?
我的应用程序使用Flask,Flask-SQLAlchemy,Flask-WTF和Jinja2的组合.
在目前的版本中,我有一个设置表.该表只有一个记录,包含一个字段.最初该表包含零记录.
我想要实现的是:
这是我的代码:
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) 我正在使用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) 上下文
我在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)并从结果缓存中获取属性或数据源.它通过获取有问题的未延迟表示Model并only()在其上调用另一个查询来完成此操作.
这是循环遍历外键Model并访问其值时的问题,Cachine Machine引入了无意的递归.getattr(self, …
我有一个接受默认参数的方法:
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)
有没有办法在测试时覆盖此值,以便我可以使用模拟 …
如何在ModelViewreadonly 上创建一个字段?
class MyModelView(BaseModelView):
column_list = ('name', 'last_name', 'email')
Run Code Online (Sandbox Code Playgroud) python ×7
flask ×4
wtforms ×3
immutability ×2
java ×2
bash ×1
centos ×1
django ×1
django-orm ×1
flask-admin ×1
forms ×1
interface ×1
jackson ×1
json ×1
linux ×1
mocking ×1
python-mock ×1
spring ×1
unit-testing ×1
validation ×1