Python:函数的单元测试不返回任何内容,但更改对象的状态

pko*_*out 2 python testing

我有一个不返回任何值的函数,但会更改其对象的内部状态。例如:

class A(object):
    def __init__(self):
        self._status = None

    def doSomethingThatResultsInChangingStatus(self):
        ...do some computing...
        self._status = newStatus
Run Code Online (Sandbox Code Playgroud)

实例_status变量应该是私有的,所以尽管 Python 从技术上讲允许我在函数调用后检查它的状态,但我觉得我不应该这样做。我现在检查它的方法是为_status变量设置一个 getter 函数,但这基本上与直接检查私有变量类似。测试这种功能的正确方法是什么?

fam*_*kin 5

直接评估_status

def test():
    a = A()
    a.doSomethingThatResultsInChangingStatus()
    assert a._status == 'changed correctly'
Run Code Online (Sandbox Code Playgroud)

这就是我们使用 Python 的原因之一,对吗?不必设计像test-only-wrappers-around-private 这样愚蠢的装置。请记住,我们都是同意的成年人。Python 中的 Private 只是为了标记不适合一般客户端使用的成员,如果您不知道自己在做什么,则可能无法安全使用。