只是出于兴趣,在使用Moq测试框架进行模拟时不包括设置的影响是什么?

时间:2015-11-27 08:04:15

标签: moq

我只是想知道在moq单元测试运行期间不包括设置的影响。我只使用Moq.Verify查看我的函数是否完全被调用,而不是其他任何内容。

2 个答案:

答案 0 :(得分:2)

  1. 在虚空方法上不会发生任何事情
  2. 方法的返回值为subjects = s.subjects.ToList()
  3. 部分模拟(var students = db.Students.Select(s => {}).ToList(); var studentIds = students.Select(s=>s.Id).ToArray(); var subjects = db.Subjects.Where(s=>studentIds.Contains(s.StudentId)) .ToArray() .GroupBy(s=>s.StudentId) .ToDictionary(g=>g.Key, g=>g.ToList()); //Populate subjects for each student students.ForEach(s=> { s.subjects = subjects.ContainsKey(s.Id)?subjects[s.Id]:new List<Subject>(); }); );虚拟方法的实际实现将执行
  4. 严格嘲笑;任何非设置方法的调用都会引发异常。
  5. 在测试结束时致电default(T)将无能为力。
  6. 您将无法通过方法(CallBase = true.VerifyAll()
  7. 提出其他操作

    在您的情况下,您似乎根本不必使用设置方法......

答案 1 :(得分:1)

这取决于您的模拟对象将使用哪个MockBehavior

  • 如果它是Strict并且您的代码正在尝试执行未设置的方法,则测试方法将抛出类似Moq.MockException: Class.Method() invocation failed with mock behavior Strict. All invocations on the mock must have a corresponding setup.的异常。

  • 如果它是Loose那么它永远不会抛出并返回默认值或空数组,枚举等,如果没有为成员设置期望。