2009-08-25 12 views
5

¿Cuál es el equivalente del acceso predeterminado (paquete) de Java en C#? ¿Hay alguno? ¿Hay alguna forma de restringir el acceso a un espacio de nombres en particular?¿Cuál es el equivalente del acceso predeterminado (paquete) de Java en C#?

El problema:

Estoy tratando de restringir el acceso a ciertos métodos para sólo mis pruebas NUnit - en JUnit Me gustaría hacer esto haciendo que el acceso de paquete métodos y tener la prueba en el mismo paquete, pero bajo src/test/java en lugar de src/main/java. ¿Cómo puedo lograr algo similar en C#?

Nota: No puedo hacer los métodos internal porque mis pruebas están en un ensamblaje por separado, como es la convención NUnit, ¿o no?

Respuesta

22

C# no tiene acceso a nivel de paquete o de espacio de nombres, solo nivel de ensamblaje, que también se conoce como acceso internal.

Sin embargo, puede hacer que sus métodos sean internos y usar el atributo InternalsVisibleTo para exponerlos al ensamblaje de prueba de la unidad.

Puede resultarle útil read esta publicación y this one.

1

No hay nada que sea exactamente equivalente. La palabra clave internal está cerca, pero se limita por el ensamblado, no por el espacio de nombres.

Si algo se etiqueta con interno, sólo se puede acceder desde el código dentro del mismo ensamblado (DLL, EXE)

+1

... o por código en otros ensamblados a los cuales se les ha dado permiso explícito para acceder a elementos internos usando InternalsVisibleTo. – adrianbanks

0

que podría restringir los métodos a ser visible sólo en su montaje haciéndolos interna

1

Hay otra manera que es muy diferente. Puede utilizar partial classes así:

  1. archivo # 1 = código que se está probando. Escrito como siempre, pero con la palabra clave 'parcial'
  2. Archivo n. ° 2 = prueba unitaria, contiene una clase anidada que es la prueba unitaria real.

Las clases anidadas tienen acceso a todo en su clase principal (incluidos los métodos privados). Como parte de su proceso de compilación (tal vez scripts MSBuild o NAnt), simplemente no compile las pruebas como parte del ensamblaje final, y el código bajo prueba funcionará muy bien.

Cuestiones relacionadas