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.