Вы можете посмотреть на упаковку всех параметров среды, которые могут измениться, в отдельный класс, реализующий интерфейс. Затем его можно передать статическому методу, который вы написали, который затем вызывал бы интерфейс обратно, когда ему нужны различные настройки.
Это позволит вам макетировать параметры среды для стандартизации при тестировании, чтобы предотвратить возникшую проблему. Это также позволит вам изменять настройки для тестирования различных условий.
, например
public interface IEnvironment
{
public bool SupportsIPV6 { get; }
}
И тогда ваш статический метод становится.
public static void DoSomething(IEnvironment environment)
{
if(environment.SupportsIPV6)
{
...
}
}
Затем предоставьте реализацию IEnvironment, которая вызывает статический метод System.Net, чтобы получить фактические настройки для использования, но фиктивную реализацию для тестирования с известным значением.
Если вы не хотите передавать интерфейс в статический метод, вы можете посмотреть на реализацию объекта, используя шаблон синглтона, который затем вызывает этот интерфейс. Статический метод, который у вас есть, мог бы затем использовать синглтон для доступа к любому текущему интерфейсу, хотя этот метод немного запутанный, поэтому я бы, вероятно, выбрал первый.
Е.Г.
public Environment : IEnvironment
{
private static IEnvironment current = new Environment();
public static IEnvironment Current
{
get { return current; }
set { current = value; }
}
public bool SupportsIPV6
{
return System.Net.....
}
}
Затем вызовите его из статического метода, используя.
public static void DoSomething(IEnvironemnt environment)
{
if(Environment.Current.SupportsIPV6)
{
...
}
}
И вы можете изменить его в своих тестах через
Environment.Current = new MockedEnvironment();
Хотя вам нужно остерегаться, если вы делаете какую-либо многопоточность с таким синглтоном.