标签: monkeypatching

Test_xxx func 访问 golang 中的共享数据安全吗?

我对 golang 单元测试感到困惑。

我有 2 个Test_xxx函数,例如Test_1Test_2
在中Test_1,我将更改一个全局变量,可以Test_2看到变化吗?

此外,如果我使用monkey patch而不是更改全局变量,其他Test_xxx函数会感知到修补吗?
即,我是否有必要在返回时使用 defer 取消 func 替换Test_xxx

unit-testing monkeypatching global-variables go

2
推荐指数
1
解决办法
1674
查看次数

是否可以在 Ruby 中冻结(使其不可变)类或方法?

在红宝石中:

module Example
  class ExampleValidator
    def mymethod
      # do something important
    end
  end
end
Run Code Online (Sandbox Code Playgroud)

是否可以使其mymethod不可变(即没有猴子修补)?

不然“冻结”全班也可以接受ExampleValidator

ruby monkeypatching metaprogramming

2
推荐指数
1
解决办法
175
查看次数

寻找猴子修补有什么问题的具体例子?

关于猴子修补如此酷或猴子补丁是地球上最糟糕的事情,我听过很多关于oahs和aahs的消息.我认为,如果你编写一些代码然后其他人改变其功能来做其他事情就不好了.但我正在寻找一个可能真的伤害你的情况的具体例子.我的意思是,我一直在编写代码,然后我的同事会对其进行更改.那么,猴子修补与此有何不同?可能发生的最坏情况是什么?

language-agnostic monkeypatching

1
推荐指数
1
解决办法
438
查看次数

在Django中,如何更改User类以使用不同的db表?

我们正在运行django并与现有应用程序共享数据库.我们希望使用现有的"用户"表(不是Django自己的)来存储用户信息.

看起来可以在User定义的Meta类中更改Django使用的表的名称.

但我们宁愿不改变Django核心本身.

所以我们认为我们可以像这样对核心auth.User类进行子类化:

class OurUser(User) :
    objects = UserManager()
    class Meta:
        db_table = u'our_user_table'
Run Code Online (Sandbox Code Playgroud)

这里,目的不是为自定义的User类添加任何额外的字段.但只是使用替代表.

但是,这会失败(可能是因为ORM假设our_user_table应该有一个外键引用回原始用户表,而不是这样).

那么,这种明智的做法是做我们想做的事吗?我是否错过了将类映射到表格的简单方法?或者,如果没有,这可以成功吗?

更新:

我想我可以通过在local_settings.py中"修补"用户的_meta来进行我想要的更改.

User._meta.db_table = 'our_user_table'
Run Code Online (Sandbox Code Playgroud)

任何人都可以想到如果我这样做会发生什么坏事吗?(特别是在相当典型的Django/Pinax应用程序的上下文中?)

python django monkeypatching django-models

1
推荐指数
1
解决办法
1673
查看次数

如何影响Ruby代码的加载顺序?

假设您的同事monkeypat修复Fixnum类并重新定义+方法以减去而不是添加:

class Fixnum
  def +(x)
    self - x
  end
end

>> 5 + 3
=> 2
Run Code Online (Sandbox Code Playgroud)

您的问题是您想要访问+方法的原始功能.因此,您将此代码放入相同的源文件之前.它在将 monkeypatches 之前将+方法别名为"original_plus" .

class Fixnum
  alias_method :original_plus, :+
end

class Fixnum
  def +(x)
    self - x
  end
end
Run Code Online (Sandbox Code Playgroud)

现在,您可以通过original_plus访问+方法的原始功能

>> 5 + 3
=> 2
>> 5.original_plus(3)
=> 8
Run Code Online (Sandbox Code Playgroud)

但我需要知道的是:

有没有其他方法加载这个别名BEFORE他的monkeypatch加载除了将其粘贴到他修改的相同源文件中?

我的问题有两个原因:

  1. 我可能不希望他知道我已经这样做了
  2. 如果源文件被更改以使别名最终低于monkeypatch,则别名将不再产生所需的结果.

ruby monkeypatching

1
推荐指数
1
解决办法
258
查看次数

Ruby运算符可以别名吗?

我对如何让这个工作感兴趣:

me = "this is a string"
class << me
  alias :old<< :<<
  def <<(text)
    old<<(text)
    puts "appended #{text}"
  end
end
Run Code Online (Sandbox Code Playgroud)

我希望当某些内容被附加到me变量时,该对象将使用重新定义的方法.

如果我尝试运行它,我会syntax error, unexpected ':', expecting kEND接受:<<.

ruby monkeypatching metaprogramming operators

1
推荐指数
1
解决办法
753
查看次数

如何为Ruby编写猴子补丁?

我使用Rails 3并得到一个如下所示的错误:

undefined method `persisted?' for []:Array
Run Code Online (Sandbox Code Playgroud)

我想monkeypatch来解决这个问题.首先:它应该是什么样的?我对Ruby的源代码中的Array类的嵌套知之甚少.我很欣赏这个指导.

ruby monkeypatching

1
推荐指数
1
解决办法
2321
查看次数

print内置函数的函数指针是什么

我们如何在python中获取内置打印函数的函数指针.

它似乎与其他内置函数的行为不同:

>>> a = print
SyntaxError: invalid syntax

>>>> dir(print)
SyntaxError: invalid syntax

>>>> m = map
OK

>>>> dir(map)
['__call__', '__class__', [...] '__str__', '__subclasshook__']
Run Code Online (Sandbox Code Playgroud)

python pointers monkeypatching function python-2.7

1
推荐指数
1
解决办法
444
查看次数

是猴子修补技术的python示例中的装饰器吗?

最近我正在阅读猴子修补技术,并想知道是否可以这么说.

python monkeypatching

1
推荐指数
1
解决办法
483
查看次数

Would the same chain of calls on a mock always return the exact same mock object?

Code:

from unittest.mock import Mock

mock = Mock()

print('mock.f():', id(mock.f()))
print('mock.f().g().h():', id(mock.f().g().h()))
print('mock():', id(mock()))
print('mock().f():', id(mock().f()))
print()

print('mock.f():', id(mock.f()))
print('mock.f().g().h():', id(mock.f().g().h()))
print('mock():', id(mock()))
print('mock().f():', id(mock().f()))
print()

print('mock.f(1):', id(mock.f(1)))
print('mock.f(2).g(3).h(4):', id(mock.f(2).g(3).h(4)))
print('mock(5):', id(mock(5)))
print('mock(6).f(7):', id(mock(6).f(7)))
print()
Run Code Online (Sandbox Code Playgroud)

Output:

mock.f(): 4483288208
mock.f().g().h(): 4483354192
mock(): 4483368976
mock().f(): 4483708880

mock.f(): 4483288208
mock.f().g().h(): 4483354192
mock(): 4483368976
mock().f(): 4483708880

mock.f(1): 4483288208
mock.f(2).g(3).h(4): 4483354192
mock(5): 4483368976
mock(6).f(7): 4483708880
Run Code Online (Sandbox Code Playgroud)

Observation:

The output shows that a specified chained function call on a mock always returns the same object within the …

python unit-testing monkeypatching mocking

1
推荐指数
1
解决办法
94
查看次数