我有以下使用 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()
方法,只为其返回一些值,但如果是这种情况,我为什么要关心发送给它的可能参数?
谢谢