unit-testing - 测试驱动开发 : Writing tests for private/protected variables

标签 unit-testing variables tdd private protected

我正在学习 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/

相关文章:

ruby-on-rails - Rails 4 Controller 测试 "Undefined Method Permit"

batch-file - FOR/F 这是在批处理文件中跳过行的正确方法吗

deployment - 使开发、测试、登台和生产环境彼此不同的好策略

PhpSpec 内置函数异常测试

javascript - Jasmine:为 Rails 定义单独的源文件集?

python - Python构造函数中异常的单元测试

c# - 在 C# 方法中测试错误输入

android - Robolectric 是否需要 Java 9?

python - 如何在 Pandas 中将多列合并到一个变量(即一个列表)中

c - gcc 将临时变量定义为函数参数