Это одна из причин, по которой использование статики таким образом иногда осуждается - хотя это и удобно, их очень трудно проверить.
Один из подходов состоит в том, чтобы абстрагировать работу этого класса во что-то еще.
Например, вы можете объявить
public interface ISomeonesDllService
{
IList<string> GetList(string param1);
}
Теперь создайте реализацию, которая использует StaticClass
:
public class SomeonesDllService : ISomeonesDllService
{
public IList<string> GetList(string param1)
{
return StaticClass.GetList(param1);
}
}
Чтобы сделать TestClass
тестируемым, вы можете добавить зависимость от этого внешнего сервиса в конструктор класса:
public class TestClass
{
ISomeonesDllService dllService;
public TestClass(ISomeonesDllService dllService)
{
this.dllService = dllService;
}
public void DoSomething(string param1)
{
IList<string> strings = dllService.GetList(param1);
// do work
}
}
Теперь вы можете очень легко протестировать метод DoSomething()
, потому что в вашем тестовом приборе вы можете создать экземпляр TestClass
, используя другую реализацию ISomeonesDllService
. Вы можете вручную свернуть заглушку, которая просто возвращает статический список строк, или вы можете использовать фальшивый фреймворк, такой как Rhino.Mocks, чтобы настроить его для вас (что я рекомендую).
Таким образом, вы можете изолировать DoSomething()
от работы внешних зависимостей.