jjzjj

monkeypatch

全部标签

ruby - Smalltalk 如何处理 monkeypatching?

我是一名Ruby程序员。对我来说,monkeypatching是在运行时更改外部项目中的类或模块方法。我感兴趣的是,您有什么机制可以保护您免受某些滥用该优良特性的影响。以下是我遇到的一些场景,其中monkeypatching让我很头疼。虽然我根本不知道Smalltalk,但这种语言早在Ruby出现之前就已经存在了。我做了一些研究,看看Smalltalk是否以及如何解决其中的一些问题,但在Google上没有找到太多。所以我在这里,询问Smalltalkers是否可以分享他们的智慧。场景A:bug修复冲突项目A和B依赖于项目C。项目C有一个错误。项目A和B版本包含对项目C的修复。如果您的代

python - 如何导入 pytest monkeypatch 插件?

我想使用pytestmonkeypatch插件,但我不知道如何导入它。我试过:importmonkeypath导入pytest.monkeypatch从pytest导入monkeypatch 最佳答案 它不是插件,它是内置的pytestfixture.简而言之,这意味着您只需编写一个带有monkeypatch参数的测试,测试就会将monkeypatch对象作为该参数。您链接的页面有一个简单的示例:deftest_some_interaction(monkeypatch):monkeypatch.setattr("os.getcwd"

python - 如何 monkeypatch 内置函数 datetime.datetime.now?

我想确保datetime.datetime.now()返回一个特定的日期时间用于测试目的,我该怎么做?我试过pytest的monkeypatchmonkeypatch.setattr(datetime.datetime,"now",nowfunc)但这给了我错误TypeError:can'tsetattributesofbuilt-in/extensiontype'datetime.datetime' 最佳答案 正如错误告诉您的那样,您不能对用C实现的许多扩展类型的属性进行monkeypatch。(其他Python实现可能具有与CP

python - Pytest monkeypatch 不适用于导入的函数

假设一个项目中有两个包:some_package和another_package。#some_package/foo.py:defbar():print('hello')#another_package/function.pyfromsome_package.fooimportbardefcall_bar():#...code...bar()#...code...我想测试another_package.function.call_bar模拟出some_package.foo.bar因为它有一些我想避免的网络I/O。这是一个测试:#tests/test_bar.pyfromanother

python - 为什么 python 的 monkeypatch 在导入类而不是模块时不起作用?

我在使用已接受答案的代码时遇到问题here.代码的工作取决于我如何导入日期时间。这是为什么呢?是否可以模拟它以使其双向工作?我正在使用Python3.4。下面的代码说明了这个问题:importpytestfromdatetimeimportdatetimemockdate=datetime(2000,1,1,0,0,0)@pytest.fixture(autouse=True)defpatch_datetime_now(monkeypatch):classmydatetime:@classmethoddefnow(cls):returnmockdatemonkeypatch.setat

php - 是否可以替换 (monkeypatch) PHP 函数?

您可以在Python中执行此操作,但在PHP中是否可行?>>>defa():print1...>>>defa():print2...>>>a()2例如:Fatalerror:Cannotredeclarevar_dump()in/tmp/-online1 最佳答案 这有点,但我只想指出,从PHP5.3开始,实际上可以在不使用PHP扩展的情况下覆盖内部函数。诀窍在于您可以在命名空间内重新定义内部PHP函数。它基于PHP对函数进行名称解析的方式:在命名空间(例如A\B)内,对非限定函数的调用在运行时解析。以下是对函数foo()的调用是如

ruby - 为什么 monkeypatching Hash.new 不起作用?

我正在修补Ruby的Hash类。classHashalias_method:_initialize,:initializedefinitializeputs'Inmyhashclass'_initializeendend当我这样做Hash.new它按预期工作。但是假设我有一个接受Hash的函数。类似的东西,foo'a'=>'b'在这种情况下,我的Hash类没有被使用。我希望我的Hash类的initialize方法被调用。为什么会这样? 最佳答案 因为文字哈希不会调用Hash.new将调用的initialize方法。与Hash['a'

ruby - 如何在 Ruby 中实现安全、向后兼容的 "reverse-monkeypatch"?

如果你的同事在Ruby中“打开”(“monkeypatches”)一个类并重新定义了一些你需要使用的重要功能,你如何访问原始的pre-monkeypatched功能而不破坏已经依赖/依赖于的系统他的monkeypatched定义? 最佳答案 给定方法重写的例子,如果你能在他的猴子补丁加载之前加载一些代码,那么你可以为该方法起别名。classFixnumalias_method:original_plus,:+endclassFixnumdef+(x)self-xendend>>5+3=>2>>5.original_plus(3)=>

ruby - 如何编写将对其进行修改的 String monkeypatch 方法

我想通过提供shuffle和shuffle!方法来修改Ruby的String类。classStringdefshuffleself.split('').shuffle.joinendend它返回一个新的字符串。我如何编写一个shuffle!方法来修改字符串而不是返回副本?我试图自己弄清楚,但String的源代码在MRI中是C语言。 最佳答案 你不能赋值给self,这可能是第一个想到的。但是,有一个方便的方法String#replace,您知道,它会替换字符串的内容。classStringdefshufflesplit('').shu

ruby - 如何正确地对 Ruby 进行 monkeypatch?

我正在尝试对标准库中Net类中的一行进行monkeypatch。我在项目的lib文件夹中创建了一个名为patches.rb的文件并添加了这个moduleNetclassHTTP但它不起作用。我这样做对吗?(这与继承层次结构完全平行。)编辑:部分问题是我必须将文件放在initalizers文件夹中。但仍然看到相同的错误。 最佳答案 因为lib/目录中的东西只按需加载,你可能会更成功地将这样的补丁放在config/initializers/中,它们会在之后自动加载堆栈已初始化。您还可以将扩展的定义折叠成这样:moduleNet::HTT
12