以下 Moq 单元测试是否正确组成
本文关键字:是否 Moq 单元测试 以下 | 更新日期: 2023-09-27 18:33:13
我有以下利用 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
。
我的困惑归结为存储库中Get()
方法嘲笑.Returns()
部分。我不确定像我所做的那样设置返回值是否正确,因为从我的角度来看,它似乎不会实际执行 Get()
方法和传递给它的表达式。但是这可能是正确的,因为我没有尝试执行 Get()
方法,只为它返回一些值,但如果是这种情况,我为什么要关心发送到其中的可能参数?
谢谢
从我的角度来看,它似乎不会真正执行 Get(( 方法和传递给它的表达式。
没错 - 它实际上不会从数据库中获取数据。单元测试应测试逻辑而不是数据库连接。
为什么我会关心发送到其中的可能参数?
例如,您可以测试某些参数是否引发异常或返回 null。例如,-1 可能会引发异常。在这种情况下,您需要对此进行测试。
另请注意其他断言选项,例如 Assert.IsTrue
,这些选项可能更合适。