嘲笑没有界面或虚拟方法的课程

问题描述:

我想测试具有以下签名的方法。嘲笑没有界面或虚拟方法的课程

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?请注意,员工和地址类没有界面或虚拟方法。

+2

你的类模型。你为什么嘲笑模型?他们没有任何功能。 – kat1330

+0

你能提供你想测试的测试用例和方法吗? – kat1330

+0

这是正确的,这些都是模型,但让我们说SomeMethod有一些我想测试的业务逻辑。这不是一个好的测试场景吗? –

如果要测试以下签名int SomeMethod(List<Employee> employees)的方法,则不需要模拟Employee

您需要创建List<Employee> employees = new List<Employee>(),传递给方法和检验结果!

EmployeeAddress是没有任何功能的模型,您不需要嘲笑它们!

以下是关于你的情况下,两个想法:

  1. 你可以合法地调用你的方法new Employee()new Address()因为该代码是可测试!创建模型的新实例不会执行外部依赖。

  2. 只有在具有功能的情况下才能拨打new Employee()new Address()。在这种情况下,您将执行可能不可测试的真正依赖关系!例如,如果EmployeeAddress与数据库通信,则它不可测试,因为它将在执行测试时连接到真实数据库。比你需要创建模拟以避免数据库连接。

没有员工和你的模拟对象之间的接口或公共基类,你不能传递任何对象,除了员工。

如果有必要,我会建议有能力为你的员工类&模拟类都实现创建接口。然后,您只需将方法参数更改为接受接口而不是直接接受Employee。