我正在抽象我的一个类的历史跟踪部分,使其看起来像这样:
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 也很奇怪。所以,我的问题是,从教条的角度来看,这是一个单元测试吗?如果没有,我该如何清理它......构造函数注入是我唯一的方法吗?必须传入一个简单的对象似乎有点牵强?甚至可以将这个简单的对象推出以进行注入吗?