嘲笑没有界面或虚拟方法的课程
问题描述:
我想测试具有以下签名的方法。嘲笑没有界面或虚拟方法的课程
int SomeMethod(List<Employee> employees)
下面是相关的类
public class Employee
{
public int CustomerID { get; set; }
public string LastName { get; set; }
public string FirstName { get; set; }
public Address Address { get; set; }
}
public class Address
{
public string StreetName { get; set; }
public string CityName { get; set; }
public string State { get; set; }
public string Country { get; set; }
public string ZipCode { get; set; }
}
我怎么能嘲笑List<Employee>
作为输入的someMethod?请注意,员工和地址类没有界面或虚拟方法。
答
如果要测试以下签名int SomeMethod(List<Employee> employees)
的方法,则不需要模拟Employee
!
您需要创建List<Employee> employees = new List<Employee>()
,传递给方法和检验结果!
Employee
和Address
是没有任何功能的模型,您不需要嘲笑它们!
以下是关于你的情况下,两个想法:
你可以合法地调用你的方法
new Employee()
或new Address()
因为该代码是可测试!创建模型的新实例不会执行外部依赖。只有在具有功能的情况下才能拨打
new Employee()
或new Address()
。在这种情况下,您将执行可能不可测试的真正依赖关系!例如,如果Employee
或Address
与数据库通信,则它不可测试,因为它将在执行测试时连接到真实数据库。比你需要创建模拟以避免数据库连接。
答
没有员工和你的模拟对象之间的接口或公共基类,你不能传递任何对象,除了员工。
如果有必要,我会建议有能力为你的员工类&模拟类都实现创建接口。然后,您只需将方法参数更改为接受接口而不是直接接受Employee。
你的类模型。你为什么嘲笑模型?他们没有任何功能。 – kat1330
你能提供你想测试的测试用例和方法吗? – kat1330
这是正确的,这些都是模型,但让我们说SomeMethod有一些我想测试的业务逻辑。这不是一个好的测试场景吗? –