擅长:python、mysql、java
<p>这里有一个不需要修改非测试代码的方法。只需修补要影响的字段的<code>default</code>属性。例如--</p>
<pre><code>field = User._meta.get_field('timestamp')
mock_now = lambda: datetime(2010, 1, 1)
with patch.object(field, 'default', new=mock_now):
# Your code here
</code></pre>
<p>您可以编写助手函数来减少冗长。例如,下面的代码--</p>
<pre><code>@contextmanager
def patch_field(cls, field_name, dt):
field = cls._meta.get_field(field_name)
mock_now = lambda: dt
with patch.object(field, 'default', new=mock_now):
yield
</code></pre>
<p>会让你写——</p>
<pre><code>with patch_field(User, 'timestamp', dt):
# Your code here
</code></pre>
<p>类似地,您可以编写助手上下文管理器来同时修补多个字段。</p>