【发布时间】:2022-01-23 14:09:24
【问题描述】:
我想知道我们如何处理在编写单元测试时无法模拟的方法。
我们有一个名为 Student 的类,它有一组用于对学生数据进行操作的方法。我们还有一些用于进一步处理的扩展方法(在 C# 中)。现在我们的业务逻辑包括学生类方法和扩展方法的使用。
示例:
class Student
{
// fields
filter()
check()
...
}
BusinessLogic()
{
// get list of students
return students.Where(filter()).someExtensionMethod().FirstOrDefault().check();
}
现在,如果我们想测试 BusinessLogic 方法,我们不能模拟方法 filter()、check() 和 someExtensionMethod()。如果我们采用常规方法,我们将设置测试数据,以便我们可以测试每个方法的输出并确保这些方法被调用。如果我们有这样的 2 或 3 个方法调用,这样做是可以的。但是我想知道如果有很多这样的方法调用并且方法涉及复杂的逻辑,这使得我们的测试数据设置更加复杂,该怎么办?
编辑: 在这里,我对 Student 类中定义的函数感兴趣。例如,我有功能可以检查学生的分数是否超过 33。就像 IsPass()。我将其称为 student.IsPass()。但问题是在实际项目中,此类方法的数量可能很大。而我们的业务逻辑可以是这些方法的组合
【问题讨论】:
-
我认为第一个问题应该是:你到底想测试什么?
-
我想测试上面例子中的 BusinessLogic 方法。但我真正的意思是,我们如何测试包含上述方法调用的方法。
标签: c# unit-testing mocking