gpt4 book ai didi

python - 在 Python 中测试私有(private)方法 : Unit Test or Functional Test?

转载 作者:太空宇宙 更新时间:2023-11-03 14:28:44 26 4
gpt4 key购买 nike

阅读过关于在Python中测试私有(private)方法,具体引用this accepted answer ,看来最好只测试公共(public)接口(interface)。但是,我的类(class)看起来像这样:

class MyClass:

def __init__(self):
# init code

def run(self):
self.__A()
self.__B()
self.__C()
self.__D()

def __A(self):
# code for __A

def __B(self):
# code for __B

def __C(self):
# code for __C

def __D(self):
# code for __D

本质上,我创建了一个类来通过函数管道处理一些输入数据。在这种情况下,依次测试每个私有(private)函数而不将它们公开为公共(public)函数会很有帮助。如果单元测试无法执行私有(private)函数,该怎么办?

最佳答案

Python 在将实际执行的代码放在一起时会进行一些名称修改。因此,如果您在 MyClass 上有一个私有(private)方法 __A,您需要在单元测试中像这样运行它:

from unittest import TestCase

class TestMyClass(TestCase):
def test_private(self):
expected = 'myexpectedresult'
m = MyClass()
actual = m._MyClass__A
self.assertEqual(expected, actual)

关于所谓的“ protected ”值的问题出现了,这些值由单个下划线分隔。这些方法名称​​没有被破坏,并且可以足够简单地显示:

from unittest import TestCase

class A:

def __a(self):
return "myexpectedresult"

def _b(self):
return "a different result"


class TestMyClass(TestCase):

def test_private(self):
expected = "myexpectedresult"
m = A()
actual = m._A__a()
self.assertEqual(expected, actual)

def test_protected(self):
expected = "a different result"
m = A()
actual = m._b()
self.assertEqual(expected, actual)
# actual = m._A__b() # Fails
# actual = m._A_b() # Fails

关于python - 在 Python 中测试私有(private)方法 : Unit Test or Functional Test?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15453283/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com