Como criar uma interface que mantenha alguns métodos internos para testes em C #?

Considere a seguinte classe

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

Como você vê, tem umpublic método e uminternal método. Agora, gostaria de criar uma interface que me permita zombar dessa classe em testes (tanto nesta assembléia como em outros). Eu reescrevi meu código da seguinte forma:

public interface IEntity {
  void Foo();
}

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

No entanto, isso cria outro problema. Ao usar a classe em outro método no mesmo assembly, não consigo chamarBar não mais:

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

Reescrevendo o código assim:

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

irá desencadear um erro no teste de unidade que acionaSomeMethod. Como reescrevo meu código para que eu ainda possa usarinternal métodos na mesma assembléia e ainda só expor membros públicos a outras assembléias?

Atualizar: ClasseOtherClass é uma classe de utilitário que precisa operar em internals doEntity classe, que não são expostos diretamente aos usuários. No entanto, esta classe em si é exposta aos usuários, então eles indiretamente têm acesso aos internos doEntity. Isso é desejado comoSomeMethod fará as verificações necessárias para garantir que os usuários não estraguem o estado interno de umEntity objeto.

questionAnswers(3)

yourAnswerToTheQuestion