Как создать интерфейс, который хранит некоторые методы для тестирования в C #?

Рассмотрим следующий класс

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

Как вы видите, он имеетpublic метод иinternal метод. Теперь я хотел бы создать интерфейс, который позволит мне макетировать этот класс в тестах (как в этой сборке, так и в других). Я переписал свой код следующим образом:

public interface IEntity {
  void Foo();
}

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

Однако это создает другую проблему. При использовании класса в другом методе в той же сборке я не могу вызватьBar больше:

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

Переписать код так:

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

вызовет ошибку в модульном тесте, который запускаетSomeMethod, Как мне переписать свой код, чтобы я все еще мог использоватьinternal методы в той же сборке и, тем не менее, открывают только открытых членов другим сборкам?

Обновить: КлассOtherClass это служебный класс, который должен работать на внутреннихEntity класс, который не выставляется пользователям напрямую. Однако сам этот класс доступен пользователям, поэтому они косвенно имеют доступ к внутреннимEntity, Это желательно какSomeMethod будет выполнять необходимые проверки, чтобы пользователи не испортили внутреннее состояниеEntity объект.

Ответы на вопрос(3)

Ваш ответ на вопрос