繁体   English   中英

模拟没有接口或虚方法的类

[英]Mocking a class with no interface or virtual methods

我想测试一个带有以下签名的方法。

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的输入? 请注意,Employee和Address类没有接口或虚方法。

如果要使用以下签名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和mock对象之间的接口或公共基类,则除了Employee之外,不能传递任何对象。

如果你有能力,我建议为你的员工类和模拟类创建一个接口来实现。 然后,您只需更改方法参数即可直接接受接口而不是Employee。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM