Mr.*_*Mr. 1 .net c# nunit unit-testing nsubstitute
我正在尝试对具有公共和私有方法的类进行单元测试,并且我想对已设置为私有的特定方法(基础上的受保护抽象)进行单元测试.我不能使方法公开,我不想通过完整的过程来测试这个方法,我只关心这个方法的输入参数和返回满足期望.
这个问题强调我不想公开这个方法:
我的问题是,测试私有方法的各种方法有哪些,我应该采用哪种技术?为什么?
我已经阅读了这个问题(你如何对私人方法进行单元测试?)但是想知道接受的答案是否仍然是最好的答案,或者在几年后有更好的方法.
如果这个问题被认为是重复的,你如何对私有方法进行单元测试?我会在那里添加我的评论并要求更新,请指教.
如果你不能通过公共方法有意义地测试类的私有方法,那么这将表明类的设计有问题.如果很难测试该类,以便您希望分解测试以测试其功能的子集,那么我建议将该类分解为逻辑部分并单独测试它们.
也许您有机会重构代码,以便私有方法成为其他类的公共方法.一个很好的例子是一个类,它安排一些计时器的工作,以便稍后处理.工作方法可能会被实现为私有方法,这使得难以在不调度计时器的情况下以简单的方式进行测试,并等待它执行工作方法.在执行时间非常快的测试中并不理想.解决此问题的一个简单方法是将调度工作代码拆分为两个单独的类.私有工作方法然后成为Worker类的公共方法,使其非常容易测试.虽然拆分调度和工作代码意味着您将难以实现100%的覆盖率,但您至少会覆盖工作代码.解决这个问题的方法是使用Quartz.net之类的东西来实现调度程序类,这样你就可以很容易地对调度程序和工作程序代码进行单元测试.