c# – 单元测试跟踪状态的类

c# – 单元测试跟踪状态的类,第1张

概述我正在抽象一类我的历史跟踪部分,所以它看起来像这样: private readonly Stack<MyObject> _pastHistory = new Stack<MyObject>();internal virtual Boolean IsAnyHistory { get { return _pastHistory.Any(); } }internal virtual void A 我正在抽象一类我的历史跟踪部分,所以它看起来像这样:
private Readonly Stack<MyObject> _pastHistory = new Stack<MyObject>();internal virtual Boolean IsAnyHistory { get { return _pastHistory.Any(); } }internal virtual voID AddobjectToHistory(MyObject myObject){  if (myObject == null) throw new ArgumentNullException("myObject");  _pastHistory.Push(myObject);}internal virtual MyObject RemoveLastObject(){  if(!IsAnyHistory) throw new InvalIDOperationException("There is no prevIoUs history.");  return _pastHistory.Pop();}

我的问题是我想单元测试Remove会返回最后添加的对象.

> AddobjectToHistory
> RemoveObjectToHistory – >返回通过AddobjectToHistory放入的内容

但是,如果我必须先调用Add,它不是真正的单元测试吗?但是,我能看到以真正的单元测试方式执行此 *** 作的唯一方法是在构造函数中传入Stack对象或模拟出IsAnyHistory ……但是模拟我的SUT也很奇怪.所以,我的问题是,从教条的角度来看,这是一个单元测试吗?如果没有,我该如何清理它…是构造函数注入我唯一的方法?它似乎只是需要传递一个简单的对象?是否可以将这个简单的物体推出注入?

解决方法 这些方案有两种方法:

>干扰设计,比如使_pastHistory内部/保护或注入堆栈
>使用其他(可能是单元测试的)方法来执行验证

与往常一样,没有黄金法则,虽然我会说你通常应该避免单元测试强制设计变更的情况(因为这些变化很可能会给代码消费者带来歧义/不必要的问题).

尽管如此,最终你需要权衡单元测试代码对设计的干扰程度(第一种情况)或弯曲完美的单元测试定义(第二种情况).

通常情况下,我发现第二种情况更具吸引力 – 它不会使原始类代码混乱,并且您很可能已经添加已经测试过的 – it’s safe to rely on it.

总结

以上是内存溢出为你收集整理的c# – 单元测试跟踪状态的类全部内容,希望文章能够帮你解决c# – 单元测试跟踪状态的类所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1251595.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存