Moq を利用する次の単体テストを取得し、それらをコンパイルして正しい結果を得ることができましたが、それらを正しく実装したかどうか確信が持てません。実装したとしても、この状況で Moq が何をしているのかを誤解しています。
ここに私の単体テストがあります:
TaskInstance taskInstance_1 = new TaskInstance() { Id = 1, Task = task_1 };
IEnumerable<TaskInstance> _domainTaskInstances = new List<TaskInstance>()
{ taskInstance_1 };
[TestMethod()]
public void TaskService_CheckForTaskUsage_Success()
{
_taskInstanceRepository.Setup(x => x.Get(It.IsAny<Expression<Func<
TaskInstance, bool>>>(), null, "")).Returns(_domainTaskInstances);
int taskId = 1;
bool expected = true;
bool actual;
actual = GetTarget().CheckForTaskUsage(taskId);
Assert.AreEqual(expected, actual);
}
[TestMethod()]
public void TaskService_CheckForTaskUsage_Failure()
{
_taskInstanceRepository.Setup(x => x.Get(It.IsAny<Expression<Func<
TaskInstance, bool>>>(), null, "")).Returns(new List<TaskInstance>()
.AsEnumerable());
int taskId = 2;
bool expected = false;
bool actual;
actual = GetTarget().CheckForTaskUsage(taskId);
Assert.AreEqual(expected, actual);
}
私がチェックしている方法はこれです:
public bool CheckForTaskUsage(int taskId)
{
return _taskInstanceRepository.Get(x => x.Task.Id == taskId).Any();
}
私が嘲笑している方法はこれです:
IEnumerable<T> Get(Expression<Func<T, bool>> filter = null, Func<IQueryable<T>,
IOrderedQueryable<T>> orderBy = null, string includeProperties = "");
メソッドは、メソッドが存在し、設定されGetTarget()
ているクラスのインスタンスを作成します。CheckForTaskUsage()
_taskInstanceRepository
私が持っている混乱は、リポジトリ内.Returns()
のメソッドのモックの部分にあります。Get()
私が行ったように戻り値を設定することが正しいかどうかはわかりません。私の観点からは、Get()
メソッドとそれに渡された式が実際に実行されるようには見えないからです。ただし、Get()
メソッドを実行しようとしているのではなく、いくつかの値を返すだけなので、これは正しいかもしれませんが、その場合、送信される可能性のあるパラメーターを気にする必要はありませんか?
ありがとう