gpt4 book ai didi

c# - 如何对生成线程的方法进行单元测试?

转载 作者:太空狗 更新时间:2023-10-29 20:29:30 24 4
gpt4 key购买 nike

我是 TDD 的新手,但已经使用它足够长的时间来了解如何使用模拟、 stub 、依赖注入(inject)、控制反转来解决“类似”问题……但出于某种原因,我感到非常不安使用依赖项注入(inject)并传入“IThread”(或类似的)。

为了给它一些基本的上下文——我正在尝试向遗留应用程序添加单元测试,但我不确定如何对构造函数生成两个线程的类进行单元测试。

使用依赖注入(inject)是唯一的选择吗?

如果是这样,线程带来的功能又如何呢?就目前而言,线程都运行 while(true) 循环并且永远不会退出循环(除非应用程序正在终止)。在循环内部有合理的代码块,我真正想要测试的正是这段代码。

更糟糕的是,我不想将所有功能都从循环中拉出并放入公共(public)方法中(我只测试公共(public)方法,因为我的测试存在于另一个项目中)因为它确实会降低代码中其他地方类的易用性。

有什么建议吗?

最佳答案

您能否将功能拉入内部 方法并使用InternalsVisibleTo反而?即使您真的希望它们是私有(private)的,这也是一个合理的折衷解决方案。

如果您的线程通常会永远运行,那确实很难测试...听起来您真的应该单独测试“线程做什么”部分,如果它们不依赖 关于处于不同的线程中。

一个偶尔有用的选项是拥有一个IScheduler 类型的接口(interface)——要求它在它认为合适的地方执行一个 Action ;生产者将创建一个新线程,但您的测试者可以在现有线程中(或在您在测试代码中控制的线程上)运行操作。我不确定这是否适合您这里的情况,线程将永远运行,但您可能想在其他情况下考虑一下。

关于c# - 如何对生成线程的方法进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2100603/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com