我对TDD很新,但已经使用它足够长的时间来理解如何使用模拟,存根,依赖注入,控制反转来解决“类似”问题...但由于某种原因,我感到非常不安使用依赖注入并传入'IThread'(或类似的)。
给它一些基本的上下文 - 我试图将单元测试添加到遗留应用程序中,我不确定如何对构造函数生成两个线程的类进行单元测试。
是使用依赖注入的唯一选择吗?
如果是这样,线程带来的功能呢?因为它代表线程都运行while(true)循环并且永远不会退出循环(除非应用程序正在终止)。在循环内部有合理的代码块,这是我真正想要测试的代码。
更糟糕的是,我不想将所有功能从循环中拉出来并进入公共方法(我只测试公共方法,因为我的测试存在于另一个项目中),因为它将真正减少代码中其他地方的类的易用性。
有什么建议吗?
答案 0 :(得分:5)
您是否可以将功能拉入内部方法并使用InternalsVisibleTo
代替?即使你真的希望它们是私密的,这也是一个合理的折衷解决方案。
如果你的线程通常会永远运行,那确实很难测试...而且听起来你真的应该单独测试“线程做什么”,如果它们不是依赖的话处于不同的线程中。
偶尔有用的一个选项是拥有IScheduler
类型的界面 - 要求在任何适合的地方执行操作;生产者可以创建一个新线程,但是您的测试可以在现有线程内(或在您在测试代码中控制的线程上)运行该操作。我不确定这适合你的情况,线程会永远运行,但你可能想在其他情境中考虑它。