Jak utworzyć interfejs, który zachowuje niektóre metody wewnętrzne do testowania w języku C #?

Rozważ następującą klasę

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

Jak widzisz, mapublic metoda i aninternal metoda. Chciałbym teraz stworzyć interfejs, który pozwoli mi na próbę tej klasy w testach (zarówno w tym zespole, jak iw innych). Przepisuję mój kod w następujący sposób:

public interface IEntity {
  void Foo();
}

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

Stwarza to jednak inny problem. Podczas używania klasy w innej metodzie w tym samym zespole nie mogę wywołaćBar już:

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

Przepisywanie kodu w ten sposób:

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

spowoduje wyzwolenie błędu w teście jednostkowymSomeMethod. Jak mogę przepisać mój kod, aby móc nadal korzystaćinternal metody w tym samym zespole, a jednocześnie ujawniają członków publicznych tylko innym zespołom?

Aktualizacja: KlasaOtherClass to klasa narzędziowa, która musi działać na wewnętrznych elementachEntity klasa, która nie jest bezpośrednio widoczna dla użytkowników. Jednak ta klasa jest narażona na użytkowników, więc pośrednio mają dostęp do wewnętrznych elementówEntity. Jest to pożądaneSomeMethod przeprowadzi niezbędne kontrole, aby upewnić się, że użytkownicy nie spieprzą wewnętrznego stanuEntity obiekt.

questionAnswers(3)

yourAnswerToTheQuestion