我正在尝试使用(反向移植)模块将间谍附加到类中的方法mock。也就是说,我想创建一个模拟,其工作原理与原始方法类似,但提供常用Mock功能call_count,例如等。
这是我当前使用的代码:
import mock
class MyClass(object):
def my_method(self, arg):
return arg + 1
def unit_under_test():
inst = MyClass()
return inst.my_method(1)
with mock.patch.object(MyClass, 'my_method', autospec=True,
side_effect=MyClass.my_method) as spy:
result = unit_under_test()
assert result == 2
assert spy.call_count == 1
Run Code Online (Sandbox Code Playgroud)
效果很好。现在我想使用 的自定义子类MagicMock来代替。文档说这可以通过参数patch来new_callable完成。但是,new_callable和autospec不能一起使用:
class MyMock(mock.MagicMock):
pass
with mock.patch.object(MyClass, 'my_method', autospec=True,
side_effect=MyClass.my_method,
new_callable=MyMock) as spy:
...
Run Code Online (Sandbox Code Playgroud)
Traceback (most recent call last):
File "./mocktest.py", line 19, in <module>
new_callable=MyMock) …Run Code Online (Sandbox Code Playgroud) 我正在使用 SQLAlchemy 的声明式系统来定义我的映射。之后,我通过以下方式确保相应的表存在
Base.metadata.create_all(engine, checkfirst=True)
Run Code Online (Sandbox Code Playgroud)
如果我之后更改了我的声明类之一(例如通过添加列)并再次运行程序,那么只有当我尝试提交包含该修改类的实例的会话时才会检测到该更改。这发生在程序运行时相对较晚的时间。我更愿意在启动期间检测到该问题,以便尽早失败。
如何明确要求 SQLAlchemy 检查现有表是否与我的声明性映射匹配?
请注意,我不一定要寻找如何检测已更改的内容或如何执行相应的迁移——我只是想知道我的表是否与我的映射匹配。
我喜欢用于__qualname__工厂式类方法的返回类型注释,因为它不会对类名进行硬编码,因此可以保持子类的工作(参见此答案)。
class Foo:
@classmethod
def make(cls) -> __qualname__:
return cls()
Run Code Online (Sandbox Code Playgroud)
目前这似乎工作正常,但我不确定通过推迟注释评估(PEP 563)这是否仍然可能:PEP说
注释只能使用模块范围中存在的名称,因为使用本地名称的延迟评估不可靠(唯一的例外是由 解析的类级别名称
typing.get_type_hints())。
政治公众人物还表示:
该函数会自动解析函数和类
get_type_hints()的正确值。globalns它还自动提供正确localns的课程。
然而,下面的代码
from __future__ import annotations
import typing
class Foo():
@classmethod
def make(cls) -> __qualname__:
return cls()
print(typing.get_type_hints(Foo.make))
Run Code Online (Sandbox Code Playgroud)
失败了
File "qualname_test.py", line 11, in <module>
print(typing.get_type_hints(Foo.make))
File "/var/local/conda/envs/py37/lib/python3.7/typing.py", line 1004, in get_type_hints
value = _eval_type(value, globalns, localns)
File "/var/local/conda/envs/py37/lib/python3.7/typing.py", line 263, in _eval_type
return t._evaluate(globalns, localns)
File "/var/local/conda/envs/py37/lib/python3.7/typing.py", …Run Code Online (Sandbox Code Playgroud) 所以我想创建一个带有单个输入字段的超级基本表单,用于查询我的数据库.
我的模型(models.py)如下:
from django.db import models
class Book(models.Model):
uid = models.IntegerField(primary_key=True)
title = models.CharField(max_length=30)
class Meta:
db_table = u'books'
Run Code Online (Sandbox Code Playgroud)
forms.py:
from django import forms
from myapp.models import Book
class EnterIDForm(forms.form):
book_id = forms.CharField()
# add a custom clean function to validate that the user input
# is a valid book ID
def clean_book_id(self):
try:
book_id = int(self.cleaned_data["book_id"])
except:
book_id = None
if book_id and Book.objects.filter(uid=book_id).count():
return book_id
else:
raise forms.ValidationError("Please enter a valid book ID number.")
Run Code Online (Sandbox Code Playgroud)
views.py …
我知道可以在let语句中解构元组和其他内容:
fn foo() -> (u8, u8) {
(1, 2)
}
fn main() {
let (x, y) = foo();
println!("{}, {}", x, y); // prints "1, 2"
}
Run Code Online (Sandbox Code Playgroud)
从 Rust 1.59 开始,我们还可以重用现有的绑定:
fn main() {
let mut x = 0;
let mut y = 0;
println!("{}, {}", x, y); // prints "0, 0"
(x, y) = foo();
println!("{}, {}", x, y); // prints "1, 2"
}
Run Code Online (Sandbox Code Playgroud)
我想知道是否有一种方法可以混合两者,即为模式中的某些变量重新使用现有的绑定,并为其他变量创建新的绑定。类似于以下内容(无法编译):
fn main() {
let mut x = 0;
println!("{}", x);
(x, let …Run Code Online (Sandbox Code Playgroud) 我可以在CKAN资源上附加额外内容吗?我注意到它ckan.model.Resource有一个extras属性,所以我试图用这样的东西创建一个资源:
resource = {
"package_id": "my-package-id",
"url": "http://google.com",
"name": "Google",
"extras": [
{ "key": "myextra", "value": "my extra content" }
]
}
from ckan.plugins import toolkit
toolkit.get_action("resource_create")(faked_context, resource)
Run Code Online (Sandbox Code Playgroud)
随之而来的是逻辑功能最终运行起来package_update,但失败了ValidationError: {u' junk': u'The input field __junk was not expected.'}
谢谢!
我们的代码库包含多种语言的代码,从Python over C#到MATLAB和LaTeX.目前,我们在每种语言中都有单元测试(使用特定于语言的框架).这使得测试自动化变得麻烦,尤其是收集和检查所有不同的报告.
因此,我正在寻找一种测试自动化工具
理想情况下,该工具将通过插件连接到现有的特定于工具的框架,如Python unittest,C#NUnit等.
有这样的工具吗?如果没有,你如何处理这样的测试场景?
我正在关注"从源代码安装CKAN"指南.并在启动码头服务的步骤:sudo service jetty start.但它不起作用,它打印"无法启动jetty.service:Unit jetty.service not found".
现在,如果改为那个命令,我使用:sudo /etc/init.d/jetty8 start,服务器正确启动.
所以,我的猜测(不完全确定)是jetty.home设置不正确.
对于它的价值,我使用的是Ubuntu 16.04,在virtualbox中运行.
提前感谢任何可以帮助我的人.
PS:如果需要其他信息,请告诉我.
python ×4
ckan ×2
django ×1
forms ×1
jetty ×1
jetty-8 ×1
postgresql ×1
python-2.7 ×1
python-mock ×1
rust ×1
sqlalchemy ×1
testing ×1