我发现,当我编写单元测试时,特别是对于不返回值的方法,我主要是用白盒测试方式编写测试。我可以使用反射来读取私有数据,以便在方法执行后检查它是否处于正确的状态等等......
这种方法有很多限制,其中最重要的是
但是,如果方法不返回值并使用私有数据进行操作,那么它就像使用黑盒测试范例一样非常难(几乎不可能)进行测试。
那么,有什么想法可以解决这个问题吗?
答案 0 :(得分:2)
白盒测试意味着您必须拉出桌面上的一些接线来连接仪器。我发现有用的东西:
1)一个整体的代码序列,我继承并且不想重写,我能够通过将状态类变量放入,然后在每个步骤通过时设置状态来进行检测。然后我测试了不同的数据,并将预期状态与实际状态相匹配。
2)为您测试的方法的任何方法调用创建模拟。检查是否按预期调用了模拟。
3)将所需的属性改为protected
而不是private
,并创建一个我实际测试过的子类。子类允许我检查州。
答案 1 :(得分:0)
我可以使用反射来读取私有数据,以便在方法执行后检查它是否处于正确状态
这对于维护测试套件来说确实是一个很大的问题
在.Net中,您可以使用内部访问修饰符,因此您可以使用类库中的InternalsVisibleToAttribute来使您的内部类型对您的单元测试项目可见。internal关键字是类型和类型成员的访问修饰符。内部类型或成员只能在同一程序集中的文件中访问
这不会解决每个测试难度,但可以提供帮助