Pregunta

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

El problema:

Estoy tratando de restringir el acceso a ciertos métodos a poco 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 el internal métodos porque mis pruebas están en un ensamblado independiente - como es la convención NUnit - o es

?
¿Fue útil?

Solución

C # no tiene el paquete o el nivel de espacio de nombres de acceso - sólo el nivel de montaje - que también se conoce como acceso interna.

Sin embargo, puede hacer que sus métodos interna y utilizar el InternalsVisibleTo atribuir al exponerlos a su conjunto de prueba de unidad.

Puede que le resulte útil para leer este post y this uno .

Otros consejos

No hay nada que es un equivalente exacto. El palabra clave interno está cerca, pero limita por el conjunto, no por el espacio de nombres.

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

Hay otra manera que es muy diferente. Puede usar clases parciales este modo:

  1. Archivo # 1 = código que se está probando. Escrita justo como normal pero con la palabra clave 'parcial'
  2. File # 2 = prueba de la unidad, contiene una clase anidada que es la prueba de la unidad real.

clases anidadas tienen acceso a todo en su clase padre (incluyendo métodos privados). Como parte de su proceso de construcción (quizás MSBuild o guiones NAnt), simplemente no compilan las pruebas como parte del montaje final, y el bajo prueba código funcionará bien.

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top