Нет, это сделает невозможным написание модульных тестов для этого класса - или классов, использующих этот класс.
С помощью такого инструмента, как FakeItEasy , вам даже не нужен этот классреализовать интерфейс, позволяющий имитировать его (это означает, что вы можете быстро приступить к издевательству над старой базой кода, которая не была написана с учетом TDD), но она не может обойти статические вызовы.
ОБНОВЛЕНИЕ
Допустим, вам нужно выполнить модульное тестирование метода GenerateWidgetReports
, который вызывает ReportGenerator.GenerateReport
.Вам необходимо убедиться, что stuffToReportOn
содержит только Widget1
& Widget2
.Как вы код этого теста?
То, что вы в конечном итоге делаете, - GenerateWidgetReports
использует метод, называемый GetStuffToReportOn
, вы можете проверить это, хорошо.GenerateWidgetReports
затем просто становится клеем, который вызывает GetStuffToReportOn
и передает его результат ReportGenerator.GenerateReport
.
Однако у вас все еще нет теста для GenerateWidgetReports
, потому что вы не можете вызвать его без на самом деле создания отчета.
В идеале класс с GenerateWidgetReports
принимает объект IReportGenerator, вы высмеиваете метод GenerateReport
и тестируете там для Widget1
& Widget2
.
Вы не можете ничего сделатьоб этом с помощью любого инструмента Mocking, если GenerateReport
является статическим.
Обновление 2
Я исправлен, TypeMock может перехватывать и перенаправлять вызовы статических методов. См. Этот ответ