如何處理私有方法的單元測試?C#設計問題
我有一個類將僱員數據加載到數據庫中。下面是一個示例:
>
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
}
}
我寫的應用程序採取串行化對象(e.g僱員以上)和數據加載到數據庫中。
我有幾個問題的設計,我想上意見:
A - 我調用這個類「EmployeeFacade」因爲我(試圖?)使用外觀模式。命名班級名稱的模式是否很好練習?
B - 調用DAL圖層類的「具體實體」是否合適「EmployeeRepository」?
c - 表示以這種方式使用的倉庫合理或者我應該建立在庫本身的方法採取,比如說,員工,然後從那裏加載數據例如EmployeeRepository.LoadAllEmployeeData(Employee employee)?我的目標是有凝聚力的類,但是這會需要知識庫中的Employee對象可能不是很好?
D - 有沒有什麼好方法可以在每個方法開始時不必檢查對象是否爲空? E - 我有一個EmployeeRepository,TaxRepository,AccountRepository聲明爲公共單元測試目的。這些都是真正的私有實體,但我需要能夠用存根替換它們,以便不會寫入我的數據庫(我重載save()方法以便不執行任何操作)。無論如何,還是我必須暴露他們?
F - 我如何測試私有方法 - 或者完成了這件事(事情告訴我它不是)?
G- 「emps.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;」這違反了德米特法則,但我如何調整我的目標以遵守法律?
7個問題? – 2010-04-28 23:20:45
這是一個工作出售;) – RCIX 2010-04-28 23:22:23
這可能是一個好主意,問這是7個不同的問題,而不是把它們集中在一起。 – 2010-04-28 23:22:32