私のクラスの履歴追跡部分を抽象化して、次のようにします。
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 をモックすることも奇妙です。それで、私の質問は、独断的な観点から、これは単体テストですか? そうでない場合、どうすればクリーンアップできますか...コンストラクターインジェクションが私の唯一の方法ですか? 単純なオブジェクトを渡さなければならないのは、一見無理があるように思えますか? この単純なオブジェクトでも押し出して注入しても大丈夫ですか?