我正在学习 TDD,我有一个关于私有(private)/ protected 变量的问题。我的问题是:如果我要测试的函数在私有(private)变量上运行,我应该如何测试它?
这是我正在使用的示例:
我有一门课叫 Table
包含一个名为 internalRepresentation
的实例变量那是一个二维数组。我想创建一个名为 multiplyValuesByN
的函数将二维数组中的所有值乘以参数 n
.
所以我为它编写了测试(在 Python 中):
def test_multiplyValuesByN (self):
t = Table(3, 3) # 3x3 table, filled with 0's
t.set(0, 0, 4) # Set value at position (0,0) to 4
t.multiplyValuesByN(3)
assertEqual(t.internalRepresentation, [[12, 0, 0], [0, 0, 0], [0, 0, 0]])
现在,如果我制作
internalRepresentation
私有(private)或 protected ,此测试将不起作用。我应该如何编写测试,使其不依赖于 internalRepresentation
但在调用 multiplyValuesByN
后仍然测试它看起来是否正确?
最佳答案
您不应该依赖对象的内部表示。这就是为什么它被标记为私有(private)或 protected 原因。考虑调用 t.multiplyValuesByN(3) 时对 t 进行了哪些可观察到的更改。然后,测试你能观察到的东西。
def test_multiplyValuesByN (self):
t = Table(3, 3) # 3x3 table, filled with 0's
t.set(0, 0, 4) # Set value at position (0,0) to 4
t.multiplyValuesByN(3)
assertEqual(t.get(0,0), 12)
关于unit-testing - 测试驱动开发 : Writing tests for private/protected variables,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3049122/