单元测试 - 白盒与黑盒策略

时间:2014-04-16 14:16:41

标签: oop unit-testing black-box-testing white-box

我发现,当我编写单元测试时,特别是对于不返回值的方法,我主要是用白盒测试方式编写测试。我可以使用反射来读取私有数据,以便在方法执行后检查它是否处于正确的状态等等......

这种方法有很多限制,其中最重要的是

  1. 如果你是返工方法,你需要改变你的测试,即使是API留下来 相同的
  2. 从信息隐藏(封装)的角度来看,这是错误的 - 测试对于我们的代码来说是一个很好的文档,所以那些人会阅读 它可能会得到一些关于实施的不必要的信息
  3. 但是,如果方法不返回值并使用私有数据进行操作,那么它就像使用黑盒测试范例一样非常难(几乎不可能)进行测试。

    那么,有什么想法可以解决这个问题吗?

2 个答案:

答案 0 :(得分:2)

白盒测试意味着您必须拉出桌面上的一些接线来连接仪器。我发现有用的东西:

1)一个整体的代码序列,我继承并且不想重写,我能够通过将状态类变量放入,然后在每个步骤通过时设置状态来进行检测。然后我测试了不同的数据,并将预期状态与实际状态相匹配。

2)为您测试的方法的任何方法调用创建模拟。检查是否按预期调用了模拟。

3)将所需的属性改为protected而不是private,并创建一个我实际测试过的子类。子类允许我检查州。

答案 1 :(得分:0)

  

我可以使用反射来读取私有数据,以便在方法执行后检查它是否处于正确状态

这对于维护测试套件来说确实是一个很大的问题

在.Net中,您可以使用内部访问修饰符,因此您可以使用类库中的InternalsVisibleToAttribute来使您的内部类型对您的单元测试项目可见。

  

internal关键字是类型和类型成员的访问修饰符。内部类型或成员只能在同一程序集中的文件中访问

这不会解决每个测试难度,但可以提供帮助

Reference