我只是想知道在moq单元测试运行期间不包括设置的影响。我只使用Moq.Verify查看我的函数是否完全被调用,而不是其他任何内容。
答案 0 :(得分:2)
subjects = s.subjects.ToList()
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>();
});
);虚拟方法的实际实现将执行default(T)
将无能为力。CallBase = true
,.VerifyAll()
)在您的情况下,您似乎根本不必使用设置方法......
答案 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
那么它永远不会抛出并返回默认值或空数组,枚举等,如果没有为成员设置期望。