在python中测试副作用

编程入门 行业动态 更新时间:2024-10-20 03:28:29
本文介绍了在python中测试副作用的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧! 问题描述

我想检查我的函数是否没有副作用,或仅影响精确变量的副作用.是否有一个函数可以检查它是否实际上没有副作用(或仅对某些变量具有副作用)?

I want to check that my function has no side-effects, or only side-effects affecting precise variables. Is there a function to check that it actually has no side-effects (or side-effects on only certain variables)?

如果没有,我该如何编写自己的代码,如下所示:

If not, how can I go about writing my own as follows:

我的想法是这样的,初始化,调用被测函数,然后调用最终方法:

class test_side_effects(parents_scope, exclude_variables=[]): def __init__(): for variable_name, variable_initial in parents_scope.items(): if variable_name not in exclude_variables: setattr(self, "test_"+variable_name, variable_initial) def final(self, final_parents_scope): for variable_name, variable_final in final_parents_scope.items(): if variable_name[:5] is "test_" and variable_name not in exclude_variables: assert getattr(self, "test_"+variable_name) is variable_final, "Unexpected side effect of %s from %s to %s" % (variable_name, variable_initial, variable_final) #here parents_scope should be inputted as dict(globals(),**locals())

我不确定这是否正是字典我要...

I'm unsure if this is precisely the dictionary I want...

最后,我应该这样做吗?如果没有,为什么不呢?

Finally, should I be doing this? If not, why not?

推荐答案

我对编写测试所用的嵌套函数测试库并不熟悉,但似乎您确实应该在此处使用类(例如,在许多框架中都是TestCase).

I'm not familiar with the nested function testing library that you might be writing a test with, but it seems like you should really be using classes here (i.e. TestCase in many frameworks).

如果您的问题与在TestCase中获取父变量有关,则可以得到__dict__(对我而言,您所指的父"变量不清楚.

If your question then, is relating to getting the parent variables in your TestCase, you could get the __dict__ (It wasn't clear to me what the "Parent" variables you were referring to.

更新:@hayden发布要点以显示父变量的使用:

UPDATE: @hayden posted a gist to show the use of parent variables:

def f(): a = 2 b = 1 def g(): #a = 3 b = 2 c = 1 print dict(globals(), **locals()) #prints a=1, but we want a=2 (from f) g() a = 1 f()

如果将其转换为字典,则可以使用以下方法解决该问题:

If this is converted to a dictionary, then the problem is solvable with:

class f(object): # could be unittest TestCase def setUp(self, a=2, b=1): self.a = a self.b = b def g(self): #a = 3 b = 2 c = 1 full_scope = globals().copy() full_scope.update(self.__dict__) full_scope.update(locals()) full_scope.pop('full_scope') print full_scope # print a = 1 my_test = f() my_test.setUp(a=1) my_test.g()

您应该寻找已经实现了此目的的工具.我希望其他人将有一个已经实施的解决方案.

You are right to look for a tool which has already implemented this. I am hopeful that somebody else will have an already implemented solution.

更多推荐

在python中测试副作用

本文发布于:2023-11-14 00:33:35,感谢您对本站的认可!
本文链接:https://www.elefans.com/category/jswz/34/1585730.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
本文标签:副作用   测试   python

发布评论

评论列表 (有 0 条评论)
草根站长

>www.elefans.com

编程频道|电子爱好者 - 技术资讯及电子产品介绍!