Domanda

Sono un programmatore Java che ora scrivo anche in C#.Ho visto classi di accesso generate dal software di generazione di test VS (per fornire accesso da Test a membri o funzioni privati).Dovrei creare accessori deliberatamente e, se sì, perché

È stato utile?

Soluzione

Le funzioni di accesso generate in MSTest servono per testare le parti private delle classi.Quindi già lì mi chiederei se dovessimo testare esplicitamente gli interni.

Credo che i test unitari dovrebbero solo esercitare il volto pubblico di una classe, quindi il materiale di accesso generato diventa obsoleto.Nella mia esperienza questa è una buona cosa, dal momento che trovo che non sia banale mantenerli soprattutto quando le cose cambiano (come di solito fanno con il refactoring in corso).

Altri suggerimenti

In L'arte dei test unitari di Roy Osherove, menziona una cosa davvero importante sui consumatori delle tue lezioni.I test unitari sono consumer e utilizzano l'API.Se hai bisogno di modificare la visibilità della tua API per testarla, dovresti.Non utilizzare accessori se puoi evitarlo.

Infatti suggerisco di leggere questo libro :-)

Se utilizzi le funzioni di accesso, l'implementazione sottostante può essere modificata senza modificare l'API.

Esponendo un campo pubblico esponi gli aspetti interni di come vengono archiviati i dati.L'utilizzo di una proprietà pubblica consente invece una maggiore flessibilità per modificare il modo in cui i dati vengono archiviati internamente e non interrompere l'interfaccia pubblica.

In C# 3.0 e versioni successive, l'implementazione automatica le proprietà fanno la dichiarazione di proprietà più conciso quando non c'è una logica aggiuntiva è obbligatorio nelle funzioni di accesso alle proprietà.Consentono inoltre al codice client di creare objects Quando si dichiara una proprietà come illustrato nell'esempio seguente, il metodo compilatore crea un oggetto privato e anonimo è possibile accedere solo al campo di supporto attraverso l'immobile get and set Funzioni.

Proprietà implementate automaticamente

Per esempio:

// Auto-Impl Properties for trivial get and set
public string Name { get; set; }
public int CustomerID { get; set; }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top