如何处理私有方法的单元测试?
我有一个类将Employee数据加载到数据库中.这是一个示例:
>
public class EmployeeFacade
{
public Employees EmployeeRepository = new Employees();
public TaxDatas TaxRepository = new TaxDatas();
public Accounts AccountRepository = new Accounts();
//and so on for about 20 more repositories etc.
public bool LoadAllEmployeeData(Employee employee)
{
if (employee == null)
throw new Exception("...");
bool exists = EmployeeRepository.FetchExisting(emps.Id);
if (!exists)
{
EmployeeRepository.AddNew();
}
try
{
EmployeeRepository.Id = employee.Id;
EmployeeRepository.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;
EmployeeRepository.SomeOtherAttribute;
}
catch() {}
try
{
emps.Save();
}
catch(){}
try
{
LoadorUpdateTaxData(employee.TaxData);
}
catch() {}
try
{
LoadorUpdateAccountData(employee.AccountData);
}
catch() {}
... etc. for about 20 more other employee objects
}
private bool LoadorUpdateTaxData(employeeId, TaxData taxData)
{
if (taxData == null)
throw new Exception("...");
...same format as above but using AccountRepository
}
private bool LoadorUpdateAccountData(employee.TaxData)
{
...same format as above but using TaxRepository
}
}
Run Code Online (Sandbox Code Playgroud)
我正在编写一个应用程序来获取序列化对象(例如上面的Employee)并将数据加载到数据库中.
我有一些设计问题,我希望看到:
A - 我称这个类为"EmployeeFacade",因为我(尝试?)使用Facade模式.在类名上命名模式是否很好?
B - 调用我的DAL层类"存储库"的具体实体(例如"EmployeeRepository")是否合适?
C - 以这种方式使用存储库是否合理,或者我应该在存储库本身创建一个方法,比如Employee,然后从那里加载数据,例如EmployeeRepository.LoadAllEmployeeData(Employee employee)?我的目标是有凝聚力的类,但这将需要存储库以获得可能不太好的Employee对象的知识?
D - 在每种方法开始时不必检查对象是否为空,有什么好方法吗?
E - 我有一个EmployeeRepository,TaxRepository,AccountRepository声明为public,用于单元测试目的.这些实际上是私有的,但我需要能够用存根替换它们,以便不会写入我的数据库(我重载save()方法什么都不做).反正在这周围还是我必须暴露它们?
F - 我如何测试私有方法 - 或者这样做(有些东西告诉我它不是)?
G-"emps.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;" 这打破了得墨忒耳法,但我如何调整我的物体以遵守法律?