2010-11-19 51 views
1

的我有一个第三方服务单元测试策略 - 验证状态私有字段

每次临危它更新内存中的记录(List<MyObj>举行)的消息时临危消息的窗口服务,并定期广播他们

我想测试名单的状态

选项我想出了是

  1. 将列表的可见性从私有更改为受保护。然后创建一个具有公开属性的测试特定子类,其中显示状态

  2. 将公共属性添加到仅在调试模式下编译的类中。 即

#if (DEBUG) 
     public IList<MyObj> TestProperty 
     { 
      get { return _myObj; } 
     } 
#endif 

哪一个是最好的解决方案(或至少坏)?

有没有更好的方法?

* 编辑 *

刚刚发现这篇文章提供了一个彻底的运行所有选项

http://www.codeproject.com/KB/cs/testnonpublicmembers.aspx

回答

2

你有两个选择:

  1. 做一个internal财产暴露领域,然后通过授权访问InternalsVisibleTo属性到您的测试组件。这样,你可以保持封装。
  2. 通过反射直接访问该字段。我所知道的所有测试框架都有一个API(例如MSTest中的PrivateObject或MbUnit中的Mirror ...)。

HTH。
Thomas

2

如果可能,试着测试你的代码的可见效果下降。你说班上定期播出清单......好吧,如果你可以增加额外的控制来发送广播,你可以通过强制广播来有效地测试清单的内容。这是代码的可见结果,所以理想情况是您应该测试。

我都是为了测试内部的东西而做出的,但是在这种情况下,它听起来像是可能会有点过头。

(另一种方法是使一个内部财产,并使用[InternalsVisibleTo]。)

+0

我明白你的观点 - 然而,广播信息已经从接收到的信息转变而来。我想验证整个清单上的各种操作。此外,广播由定时器触发,这使得难以通过单元测试进行验证。(谢谢) – ChrisCa 2010-11-19 09:53:37

+0

@Christo:我会建议让广播部分更容易测试,更可编程的定时器。 – 2010-11-19 12:34:32