我想在Linux和Windows上运行一些c ++代码.有些代码我只希望包含在一个操作系统中,而不包含在另一个操作系统中.是否有标准的#ifdef可以使用?
就像是:
#ifdef LINUX_KEY_WORD
... // linux code goes here.
#elif WINDOWS_KEY_WORD
... // windows code goes here.
#else
#error "OS not supported!"
#endif
Run Code Online (Sandbox Code Playgroud)
问题确实是重复的,但这里的答案要好得多,尤其是被接受的答案.
我正在使用Python的模拟,并想知道这两种方法中的哪一种更好(阅读:更多pythonic).
方法一:只需创建一个模拟对象并使用它.代码如下:
def test_one (self):
mock = Mock()
mock.method.return_value = True
self.sut.something(mock) # This should called mock.method and checks the result.
self.assertTrue(mock.method.called)
Run Code Online (Sandbox Code Playgroud)
方法二:使用补丁创建模拟.代码如下:
@patch("MyClass")
def test_two (self, mock):
instance = mock.return_value
instance.method.return_value = True
self.sut.something(instance) # This should called mock.method and checks the result.
self.assertTrue(instance.method.called)
Run Code Online (Sandbox Code Playgroud)
两种方法都做同样的事情.我不确定这些差异.
谁能开导我?
使用py.test,两个在不同目录中调用相同的测试会导致py.test失败.这是为什么?如何在不重命名所有测试的情况下更改此设置?
复制做:
; cd /var/tmp/my_test_module
; mkdir -p ook/test
; mkdir -p eek/test
; touch ook/test/test_proxy.py
; touch eek/test/test_proxy.py
; py.test
============================= test session starts ==============================
platform linux2 -- Python 2.7.3 -- pytest-2.2.4
collected 0 items / 1 errors
==================================== ERRORS ====================================
___________________ ERROR collecting ook/test/test_proxy.py ____________________
import file mismatch:
imported module 'test_proxy' has this __file__ attribute:
/home/ygolanski/code/junk/python/mymodule/eek/test/test_proxy.py
which is not the same as the test file we want to collect:
/home/ygolanski/code/junk/python/mymodule/ook/test/test_proxy.py
HINT: remove __pycache__ / .pyc files and/or use …
Run Code Online (Sandbox Code Playgroud) 出于各种原因,我试图从数据库中获取对象集合,并将其传递给另一个未连接到数据库的进程.我的代码看起来像下面的那个,但我一直在
sqlalchemy.exc.UnboundExecutionError: Instance <MyClass at 0x8db7fec> is not bound to a Session; attribute refresh operation cannot proceed
Run Code Online (Sandbox Code Playgroud)
当我尝试在get_list()
方法之外查看列表中的元素时.
def get_list (obj):
sesson = Session()
lst = session.query(MyClass).all()
session.close()
return lst
Run Code Online (Sandbox Code Playgroud)
但是,如果我使用它
def get_list_bis (obj)
session = Session()
return session.query(MyClass).all()
Run Code Online (Sandbox Code Playgroud)
我能够使用元素,但担心会话的状态,因为它没有关闭.
我在这里错过了什么?
我有两个应用程序(ook
并且eek
说),我想ook
从模型中使用外键到模型eek
.两者都是在INSTALLED_APPS
与ook
第一位.
在ook.models.py
,我有:
class Fubar(models.Model):
...
Run Code Online (Sandbox Code Playgroud)
在eek.models.py
,我有:
class monkey(models.Model):
external = models.ForeignKey('ook.Fubar', blank=True, null=True)
...
Run Code Online (Sandbox Code Playgroud)
生成的迁移是:
class Migration(migrations.Migration):
dependencies = [
('eek', '0002_auto_20151029_1040'),
]
operations = [
migrations.AlterField(
model_name='monkey',
name='external',
field=models.ForeignKey(blank=True, to='ook.Fubar', null=True),
),
]
Run Code Online (Sandbox Code Playgroud)
当我运行迁移时,我收到此错误:
...
1595 raise ValueError('Foreign Object from and to fields must be
the same non-zero length')
1596 if isinstance(self.rel.to, six.string_types):
-> 1597 raise ValueError('Related model %r cannot be resolved' % …
Run Code Online (Sandbox Code Playgroud) 我有一个方法,我试图进行单元测试.此方法将参数作为ArrayList并使用它执行操作.我试图定义的模拟是:
ArrayList<String> mocked = mock(ArrayList.class);
Run Code Online (Sandbox Code Playgroud)
这给出了[未经检查]未经检查的转换"警告.
ArrayList<String> mocked = mock(ArrayList<String>.class);
Run Code Online (Sandbox Code Playgroud)
给了我一个错误.
任何人都想关心我做错了什么?
我在python测试文件中有这样的东西:
from mock import patch,
from ..monkey import ook
[...]
@patch('monkey.ook', Mock(return_value=None))
def test_run_ook (self, mock_ook):
self.assertIsNone(ook())
mock_ook.run.assert_called_once_with('')
Run Code Online (Sandbox Code Playgroud)
当我运行这个测试时,我得到了一个ImportError: No module named monkey
.显然,我修补的道路是不对的.但是,我不知道如何使它权利,没有搞乱sys.path
或PYTHONPATH
.
有什么指针吗?
我在(很多)我的Python文件中有这个代码用于项目.
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from pprint import pformat
Run Code Online (Sandbox Code Playgroud)
Pylint抱怨说:
==ook:2
==eek:2
from __future__ import absolute_import
from __future__ import division
from __future__ import print_function
from __future__ import unicode_literals
from pprint import pformat (duplicate-code)
Run Code Online (Sandbox Code Playgroud)
虽然这是真的完全无关紧要.这些from __future__ [...]
行是为了防止从Python 2到Python 3的兼容性回归.因此,pylint不应该抱怨它们在不同的文件中是相似的.
有没有办法阻止pytlint这样做?
我知道,pylint: disable=duplicate-code
但由于导入范围,这将禁用整个文件.但是,我不想为整个文件禁用它.
我有一个需要访问X11的Python包.我想使用Xvfb,这样我就不必在构建机器上安装真正的X11 - 在这种情况下是Hudson.因此,我想在py.test启动时启动一个Xvfb服务器,使用该服务器进行所有测试,然后将其关闭.
我怎样才能做到这一点?
注意:我可以在每个测试类的SetUp(TearDown)中启动(停止)Xvfb服务器,但这有两个问题:首先,它是浪费的.其次,Fatal IO error 0 (Success) on X server
如果我正确终止服务器或者挂起不死的Xvfb进程,它就会因为奇怪而无法正常工作.如果有兴趣的话,这是使用xvfbwrapper.
我在h5py,PyTables(通过Pandas)和C++生成的HDF5文件之间经历了一些非常奇怪的交互.似乎h5check和h5py似乎应对包含'/'的类型名称,但pandas/PyTables不能.显然,我的理解存在差距,因此:
我在这里有什么不明白的?
血淋淋的细节
我在HDF5文件中有以下数据:
[...]
DATASET "log" {
DATATYPE H5T_COMPOUND {
H5T_COMPOUND {
H5T_STD_U32LE "sec";
H5T_STD_U32LE "usec";
} "time";
H5T_IEEE_F32LE "CIF/align/aft_port_end/extend_pressure";
[...]
Run Code Online (Sandbox Code Playgroud)
这是通过C++ API创建的.该h5check公用事业说,文件是有效的.
请注意,这CIF/align/aft_port_end/extend_pressure
并不是指组/节点/叶子的路径.它是一个标签,我们在内部使用,恰好有一些内部结构包含'/'作为分隔符.我们不希望HDF5文件对此有所了解:它不应该关心.显然,如果'/'在任何HDF5名称中都是非法的,那么我们必须将该分隔符更改为其他名称.
使用PyTables(好吧,Pandas但它在内部使用PyTables)来读取文件,我得到了一个
>>> import pandas as pd
>>> store = pd.HDFStore('data/XXX-20150423-071618.h5')
>>> store
/home/XXX/virt/env/develop/lib/python2.7/site-packages/tables/group. py:1156: UserWarning: problems loading leaf ``/log``::
the ``/`` character is not …
Run Code Online (Sandbox Code Playgroud)