¿Cómo abordar las pruebas unitarias de métodos privados?C# Design Questions
Tengo una clase que carga los datos del empleado en una base de datos. Aquí está una muestra:
>
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
}
}
estoy escribiendo una aplicación para tomar objetos serializados (. Empleado por ejemplo arriba) y cargar los datos a la base de datos.
Tengo una pregunta del diseño pocos que me gustaría dictámenes sobre:
A - estoy llamando esta clase "EmployeeFacade" porque estoy (tratando?) Para utilizar el patrón de fachada. ¿Es buena idea nombrar el patrón en el nombre de la clase?
B - ¿Es bueno llamar a las entidades concretas de mis clases de capa DAL "Repositorios", p. "EmployeeRepository"?
C - Está utilizando los repositorios de esta manera, es sensato o debo crear un método en el repositorio para tomar, por ejemplo, el empleado y luego cargar los datos desde allí, por ejemplo. EmployeeRepository.LoadAllEmployeeData (Empleado empleado)? Me refiero a la clase cohesiva pero, ¿esto requerirá que el repositorio tenga conocimiento del objeto Employee que puede no ser bueno?
D - ¿Hay alguna manera agradable de no tener que comprobar si un objeto es nulo al comienzo de cada método?
E - Tengo un EmployeeRepository, TaxRepository, AccountRepository declarado público para fines de pruebas de unidad. Estas son en realidad entidades privadas, pero necesito poder sustituirlas por talones para que no escriban en mi base de datos (sobrecargo el método save() para no hacer nada). ¿Hay alguna forma de esto o tengo que exponerlos?
F - ¿Cómo puedo probar los métodos privados, o se hace esto (algo me dice que no es así)?
G- "emps.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;" esto rompe la Ley de Demeter, pero ¿cómo ajusto mis objetos para cumplir con la ley?
7 preguntas? !!! –
es una venta fuera de servicio;) – RCIX
Puede ser una buena idea hacer esto como 7 preguntas diferentes, en lugar de agrupar todo. –