测试驱动开发:编写私有/受保护变量的测试

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)