如何获取单元测试的数据模板?
How get data templates for unit tests?
我需要为此方法编写单元测试:
public void MethodToTest(Data data)
{
// ... some actions with data
}
数据class:
public class Data
{
public string Name { get; set; }
public int Age { get; set; }
public string Surname { get; set; }
// ... hundred other properties
}
在我的测试中,我需要一些 Data
类型的模板对象来操作它。
但是这个 class 有太多复杂的属性,无法手动编写这个 "template" 。
在实际程序中 Data
对象是从数据库中检索的。在调试时,我可以将其中一些序列化为 XML 或 JSON。但是后来我需要以某种方式反序列化它以进行测试。相信有一种通用的模式和工具可以解决此类问题。那么正确的做法是什么?
如果 MethodToTest
仅使用 Data
class 的几个部分,您可以定义一个接口来隔离这些属性:
public interface PersonalData {
string Name {get; set; }
int Age {get; set; }
string Surname {get; set; }
}
public void MethodToTest (PersonalData data) { ... }
并Data
实现这个接口
public class Data: PersonalData { ... }
然后您可以使用实现 PersonalData
的测试 class 进行测试(或者您可以使用模拟框架生成 PersonalData
的实现)。
我需要为此方法编写单元测试:
public void MethodToTest(Data data)
{
// ... some actions with data
}
数据class:
public class Data
{
public string Name { get; set; }
public int Age { get; set; }
public string Surname { get; set; }
// ... hundred other properties
}
在我的测试中,我需要一些 Data
类型的模板对象来操作它。
但是这个 class 有太多复杂的属性,无法手动编写这个 "template" 。
在实际程序中 Data
对象是从数据库中检索的。在调试时,我可以将其中一些序列化为 XML 或 JSON。但是后来我需要以某种方式反序列化它以进行测试。相信有一种通用的模式和工具可以解决此类问题。那么正确的做法是什么?
如果 MethodToTest
仅使用 Data
class 的几个部分,您可以定义一个接口来隔离这些属性:
public interface PersonalData {
string Name {get; set; }
int Age {get; set; }
string Surname {get; set; }
}
public void MethodToTest (PersonalData data) { ... }
并Data
实现这个接口
public class Data: PersonalData { ... }
然后您可以使用实现 PersonalData
的测试 class 进行测试(或者您可以使用模拟框架生成 PersonalData
的实现)。