2009-08-25 4 views
5

Qual è l'equivalente dell'accesso predefinito (pacchetto) di Java in C#? Ce n'è uno? Esiste comunque la possibilità di limitare l'accesso a un determinato spazio dei nomi?Qual è l'equivalente dell'accesso predefinito (pacchetto) di Java in C#?

Il problema:

Sto cercando di limitare l'accesso a determinati metodi per solo i miei test NUnit - in JUnit vorrei farlo facendo l'accesso pacchetto di metodi e avendo il test nello stesso pacchetto, ma sotto src/test/java invece di src/main/java. Come posso ottenere qualcosa di simile in C#?

Nota: non riesco a creare i metodi internal perché i miei test sono in un assembly separato, come la convenzione NUnit, o è?

risposta

22

C# non ha accesso a livello di pacchetto o spazio dei nomi, solo livello di assembly, noto anche come accesso internal.

Tuttavia, è possibile rendere interni i propri metodi e utilizzare l'attributo InternalsVisibleTo per esporli al proprio assieme di test unità.

Potrebbe essere utile per read questo post e this one.

1

Non c'è niente che sia un equivalente esatto. La parola chiave internal è chiusa, ma limita l'assembly, non lo spazio dei nomi.

Se qualcosa è etichettato con interno, vi si può accedere solo dal codice all'interno della stessa assemblea (dll, exe)

+1

... o tramite codice in altri gruppi a cui è stata concessa l'autorizzazione esplicita per accedere agli articoli interni utilizzando InternalsVisibleTo. – adrianbanks

0

si potrebbe limitare i metodi per essere visibili solo nel suo assemblaggio facendo loro interno

1

C'è un altro modo che è molto diverso. È possibile utilizzare partial classes in questo modo:

  1. File # 1 = codice sotto test. Scritto come normale ma con la parola chiave 'parziale'
  2. File # 2 = test di unità, contiene una classe nidificata che è il test unitario effettivo.

Le classi nidificate hanno accesso a qualsiasi elemento della classe genitore (compresi i metodi privati). Come parte del processo di compilazione (forse script MSBuild o NAnt), non compilare i test come parte dell'assemblaggio finale e il codice sotto test funzionerà correttamente.