Che*_*tan 3 variables tdd unit-testing private protected
我正在学习TDD,我对私有/受保护变量有疑问.我的问题是:如果我想测试的函数是在私有变量上运行,我应该如何测试它?
这是我正在使用的示例:
我有一个名为的类Table包含一个名为internalRepresentation2D数组的实例变量.我想创建一个函数multiplyValuesByN,通过参数将2D数组中的所有值相乘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]])
Run Code Online (Sandbox Code Playgroud)
现在,如果我internalRepresentation私有或受保护,此测试将无效.我怎么应该写测试所以它不依赖internalRepresentation但仍然测试它在调用后看起来是否正确multiplyValuesByN?
Bry*_*yan 10
您不应该依赖于对象的内部表示.这就是它被标记为私有或受保护的原因.考虑调用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)
Run Code Online (Sandbox Code Playgroud)