У меня есть следующий метод:Правильный способ модульного тестирования частных переменных
private string _google = @"http://www.google.com";
public ConnectionStatus CheckCommunicationLink()
{
//Test if we can get to Google (A happy website that should always be there).
Uri googleURI = new Uri(_google);
if (!IsUrlReachable(googleURI, mGoogleTestString))
{
//The internet is not reachable. No connection is available.
return ConnectionStatus.NotConnected;
}
return ConnectionStatus.Connected;
}
Вопрос в том, как я могу получить его, чтобы не попробовать подключение к Google (избегая, таким образом зависимость от интернета будучи вверх) ,
Самый простой способ - принять _google
и изменить его, чтобы указать на то, что локально для машины. Но для этого мне нужно сделать _google
public
. Я бы предпочел не делать этого, потому что приложение _google
не должно меняться.
Я могу сделать `_google 'параметром для перегруженной версии метода (или конструктора объекта). Но это также предоставляет интерфейс, который я никогда не хочу использовать.
Другой вариант состоит в том, чтобы сделать _google
internal
. Но для приложения internal
- это то же самое, что и public
. Таким образом, в то время как другие не видят _google
, интерфейс приложения все еще предоставляет его.
Есть ли лучший способ? Если да, укажите это.
(Также, пожалуйста, не выбирайте на моем примере, если это на самом деле не помогает выяснить решение. Я прошу идеи об общих сценариях, как это, не обязательно это точный примера.)
Вы хотите проверить переменную или CheckCommunicationLink на вашем тестовом примере? – Eiko
@Eiko - метод ('CheckCommunicationLink') – Vaccano
Ant этот тест должен проверить * что именно *? Извините, я не хочу этого теста. Единственное, что этот метод, похоже, проверяет, работает ли интернет. Какую информацию вы получите, если будете подделывать это? Зачем вообще пытаться протестировать? – Eiko