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# – 单元测试跟踪状态的类所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)