Come affrontare i test unitari sui metodi privati?C# Design Questions
Ho una classe che carica i dati dei dipendenti in un database. Ecco un esempio:
>
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
}
}
vi scrivo un'applicazione per prendere oggetti serializzati (. Per esempio Employee sopra) e caricare i dati nel database.
Ho una domanda di progettazione pochi che vorrei pareri su:
A - sto chiamando questa classe "EmployeeFacade" perché sto (tentando?) Per utilizzare il modello di facciata. È utile praticare il nome del modello sul nome della classe?
B - È consigliabile chiamare le entità concrete delle mie classi di layer DAL "Archivi" ad es. "DipendenteRepository"?
C - Utilizza i repository in questo modo ragionevole o dovrei creare un metodo sul repository stesso per prendere, ad esempio, il Dipendente e quindi caricare i dati da lì, ad es. EmployeeRepository.LoadAllEmployeeData (impiegato dipendente)? Il mio obiettivo è la classe coesiva, ma questo richiederà al repository di conoscere l'oggetto Dipendente che potrebbe non essere buono?
D - C'è un modo carino per non dover controllare se un oggetto è nullo all'inizio di ogni metodo?
E - I ho un repository di dipendenti, un repository fiscale, un repository di account dichiarato pubblico per scopi di verifica dell'unità. Queste sono davvero delle entità private, ma ho bisogno di essere in grado di sostituirle con stub in modo che non scriverà nel mio database (sovraccarico il metodo save() per non fare nulla). C'è comunque intorno a questo o devo esporli?
F - Come posso testare i metodi privati - o è fatto (qualcosa mi dice che non lo è)?
G- "emps.Name = employee.EmployeeDetails.PersonalDetails.Active.Names.FirstName;" questo infrange la Legge di Demetra, ma come posso adeguare i miei oggetti alla legge?
7 domande? !!! –
è una vendita senza lavoro;) – RCIX
Potrebbe essere una buona idea porre questa domanda come 7 domande diverse, piuttosto che raggrupparle tutte insieme. –