¿Cómo crear una interfaz que mantenga algunos métodos internos para probar en C #?

Considera la siguiente clase

public class Entity {
  public void Foo() { ... }
  internal void Bar() { ... }
}

Como ves tiene unapublic método y uninternal método. Ahora, me gustaría crear una interfaz que me permita simular esta clase en las pruebas (tanto en este ensamblaje como en otros). Reescribo mi código de la siguiente manera:

public interface IEntity {
  void Foo();
}

internal class Entity : IEntity {
  public void Foo() { ... }
  public void Bar() { ... }
}

Sin embargo, esto crea otro problema. Cuando uso la clase en otro método en el mismo conjunto, no puedo llamarBar nunca más:

public class OtherClass {
  public void SomeMethod(IEntity entity) {
    entity.Bar(); // error!
  }
}

Reescribiendo el código de esta manera:

public class OtherClass {
  public void SomeMethod(IEntity entity) {
    (entity as Entity).Bar(); // error in test!
  }
}

provocará un error en la prueba unitaria que disparaSomeMethod. ¿Cómo reescribo mi código para que pueda seguir usando?internal ¿Métodos en la misma asamblea y, sin embargo, solo exponen a los miembros públicos a otras asambleas?

Actualizar: ClaseOtherClass es una clase de utilidad que necesita para operar en partes internas de laEntity Clase, que no están expuestos a los usuarios directamente. Sin embargo, esta clase en sí está expuesta a los usuarios, por lo que indirectamente tienen acceso a elementos internos deEntity. Esto se desea comoSomeMethod realizará las comprobaciones necesarias para garantizar que los usuarios no arruinen el estado interno de unEntity objeto.

Respuestas a la pregunta(3)

Su respuesta a la pregunta