- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有myprj
项目,文件如下。
$ tree myprj/
myprj/
├── prj
│ ├── __init__.py
│ ├── config.py
│ ├── my_logger.py
│ ├── my_module.py
│ └── tests
│ ├── __init__.py
│ ├── conftest.py
│ └── unit
│ ├── __init__.py
│ └── test_my_module.py
├── setup.py
└── tox.ini
config.py
LOG_FILE='/path/exists/on/production/prj.log'
my_logger.py
from prj import config
import logging
class MyLogger():
def __init__(self):
self.setup_logger()
def setup_logger(self):
logFilename = config.LOG_FILE
file_hdlr = logging.FileHandler(logFilename)
my_module.py
from prj import my_logger
myLogger = my_logger.MyLogger()
def my_method():
return 1
test_my_module.py
from prj import my_module
def test_my_method():
assert 1 == my_module.my_method()
setup.py
from setuptools import setup
setup(name="Tox Testing")
tox.ini
[tox]
envlist = py35
[testenv]
deps=pytest
commands=py.test
当我运行 tox
时,它失败并显示日志文件的路径不存在
。
GLOB sdist-make: /private/tmp/myprj/setup.py
py35 inst-nodeps: /private/tmp/myprj/.tox/dist/Tox Testing-0.0.0.zip
py35 installed: attrs==17.4.0,pluggy==0.6.0,py==1.5.2,pytest==3.3.2,six==1.11.0,Tox-Testing==0.0.0
py35 runtests: PYTHONHASHSEED='2231398989'
py35 runtests: commands[0] | py.test
========================================================================================================= test session starts =========================================================================================================
platform darwin -- Python 3.5.2, pytest-3.3.2, py-1.5.2, pluggy-0.6.0
rootdir: /private/tmp/myprj, inifile:
collected 0 items / 1 errors
=============================================================================================================== ERRORS ================================================================================================================
__________________________________________________________________________________________ ERROR collecting prj/tests/unit/test_my_module.py __________________________________________________________________________________________
prj/tests/unit/test_my_module.py:1: in <module>
from prj import my_module
prj/my_module.py:3: in <module>
myLogger = my_logger.MyLogger()
prj/my_logger.py:6: in __init__
self.setup_logger()
prj/my_logger.py:11: in setup_logger
file_hdlr = logging.FileHandler(logFilename)
/Users/nile2691/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py:1008: in __init__
StreamHandler.__init__(self, self._open())
/Users/nile2691/.pyenv/versions/3.5.2/lib/python3.5/logging/__init__.py:1037: in _open
return open(self.baseFilename, self.mode, encoding=self.encoding)
E FileNotFoundError: [Errno 2] No such file or directory: '/path/exists/on/production/prj.log'
!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! Interrupted: 1 errors during collection !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
======================================================================================================= 1 error in 0.36 seconds =======================================================================================================
ERROR: InvocationError: '/private/tmp/myprj/.tox/py35/bin/py.test'
_______________________________________________________________________________________________________________ summary _______________________________________________________________________________________________________________
ERROR: py35: commands failed
我明白了,日志文件路径在我的本地系统中不存在,并且出现错误。
我尝试使用 conftest.py
固定装置在 config.py
中设置 LOG_FILE
变量。
conftest.py
import pytest
from prj import config
@pytest.fixture(scope="session", autouse=True)
def set_config():
config.LOG_FILE = '/tmp/prj.log'
但它仍然返回相同的错误。如果我能够在开始测试执行之前调用某些内容,例如 py.test 的第一个执行步骤,那么我可以设置 LOG_FILE 并且它不会引发错误.
最佳答案
在 my_module.py
的全局范围内,您创建一个实例 my_logger.MyLogger()
,并在 MyLogger.__init__
中记录处理程序设置。
您的问题是在导入时设置日志处理程序的反模式。不要这样做。
对于应用程序,应在运行时配置日志处理程序(通过 main()
或其他方式完成)。对于库,根本不应该配置日志记录处理程序( possibly adding a NullHandler
除外) - 由库的用户决定他们希望如何配置处理程序。
请注意,pytest 不需要已经配置日志处理程序来测试记录的记录并对日志事件做出断言 - caplog
装置将插入自己的处理程序以捕获日志记录事件,因此即使未配置日志系统也可以使用它。
关于python - 如何在导入 pytest conftest.py 之前设置配置?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48509894/
我正在寻找一种使此打印 HTML 代码 fragment 向后兼容旧 Android 版本的简单方法: @TargetApi(Build.VERSION_CODES.KITKAT) private v
我在 GCC 终端 (centos linux) 中为 ATM 项目编译以下 c 和 .h 代码时收到以下错误。请帮忙,因为我是编程新手。 validate_acc.h #ifndef _VALIDA
在写关于 SO 的不同问题的答案时,我制作了这个片段: @import url('https://fonts.googleapis.com/css?family=Shadows+Into+Light'
试图弄清楚我应该如何在 my_div_class 之前放置一个 span 而不是替换所有它。现在它取代了 div,但我不想这样做。我假设它类似于 :before 但不知道如何使用它。 { va
我正在使用选择库 http://github.hubspot.com/select/和 noUiSlider https://refreshless.com/nouislider/ .我面临的问题如下
我是开发新手,独自工作。我正在使用 Xcode 和 git 版本控制。可能我没有适本地组织和做错事,但我通常决定做 promise 只是为了在我破坏一切之前做出安全点。在那一刻,我发现很难恰本地描述我
我想确保在同一个桶和键上读取和写入时,应该更新获取的值,也就是说,应该在对其进行写入操作之后获取它。我怎样才能做到这一点? 我想要的是,如果我更新一个键的值,如果我同时使用不同线程获取值,则更新同一个
我的问题与this有关问题,已经有了答案: yes, there is a happens-before relationship imposed between actionsof the thre
The before and after hook documentation on Relish仅显示 before(:suite) 在 before(:all) 之前调用。 我什么时候应该使用其中
我有 CSV 行,我想在其中检测所有内部双引号,没有文本限定符。这几乎可以正常工作,但我的正则表达式还可以检测双引号后的字符。 CSV 部分: "7580";"Lorem ipsum";"";"Lor
是否可以通过Youtube数据API检查广告是否可以与特定视频一起显示? 我了解contentDetails.licensedContent仅显示视频是否已上传至同一伙伴然后由其声明版权。由于第三者权
考虑一下用漂亮的彩色图表描述的“像素管道” https://developers.google.com/web/fundamentals/performance/rendering/ 我有一个元素(比
之前?
在 MVC3 中,我可以轻松地将 jQuery 脚本标签移动到页面底部“_Layout.vbhtml” 但是,在 ASP.NET MVC3 中,当您使用编辑器模板创建 Controller 时,脚手
悬停时内容被替换,但是当鼠标离开元素时我希望它变回来。我该怎么做? $('.img-wrap').hover(function(){ $(this).find('h4').text('Go
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。这个问题是 not reproducible or was caused by typos 。目前不接受答案。 这个问题是由拼写错误或无法再重现的问题引起的。虽然类似的问题可能是 on-top
已关闭。此问题不符合Stack Overflow guidelines 。目前不接受答案。 已关闭 9 年前。 有关您编写的代码问题的问题必须在问题本身中描述具体问题 - 并包含有效代码以重现该问题。
版本:qwt 6.0.1我尝试开发频谱的对数缩放。我使用简单的线条来启用缩放plotspectrum->setAxisScaleEngine(QwtPlot::yLeft, new QwtLog10S
我有两个相同的表,I_Subject 和 I_Temp_Subject,我想将 Temp_Subject 表复制到 Subject 表。 I_Temp_Subject 由简单用户使用,I_Subjec
我的印象是第一次绘制发生在触发 DOMContentLoaded 事件之后。特别是,因为我认为为了让第一次绘制发生,需要渲染树,它依赖于 DOM 构造。另外,我知道 DOM 构造完成时会触发 DOMC
我是一名优秀的程序员,十分优秀!