我已經得到了下面的單元測試,它們使用Moq並且它們編譯並給了我正確的結果,但是我不相信我已經正確地實現了它們,或者如果我有,那麼我誤解了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()
方法創建方法所在類的實例,而_taskInstanceRepository
已設置。
我有的困惑是.Returns()
部分模擬Get()
方法在存儲庫中。我不知道是否按照我所做的那樣設置返回值是正確的,因爲從我的角度來看,它似乎並不會實際執行Get()
方法以及傳遞給它的表達式。然而,這可能是正確的,因爲我不試圖執行Get()
方法,只返回一些值,但如果是這種情況,爲什麼我會關心發送到它的可能參數?
感謝
這可能屬於[代碼評論](http://codereview.stackexchange.com/users/15330/)。 –
'Returns'對我來說看起來很好。但是,如果'Get()'返回'null',你可能想添加一個測試。 :) –