C#设计问题

gua*_*azz 6 c#

如何处理私有方法的单元测试?

我有一个类将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;" 这打破了得墨忒耳法,但我如何调整我的物体以遵守法律?

zer*_*kms 1

如何进行私有方法的单元测试?

您不应该为私有方法编写测试。

创建私有方法的唯一可能的方法是重构已经测试过的公共方法。