Я знаю, что не могу использовать Moq, чтобы издеваться над вызовом статического метода внутри моего тестируемого метода, поэтому что мне нужно сделать, чтобы реорганизовать метод, чтобы я мог его протестировать? У меня также есть метод, вызывающий метод базового класса, мне нужно будет реорганизовать это, и если да, то как? Я не хочу использовать MS.Fakes или TypeMocks и создавать прокладки, я бы предпочел рефакторинг и написать твердый код!Как бы я реорганизовал статический метод, чтобы проверить свой метод?
public override DateTime ResolveDate(ISeries comparisonSeries, DateTime targetDate)
{
if (comparisonSeries == null)
{
throw new ArgumentNullException("comparisonSeries");
}
switch (comparisonSeries.Key)
{
case SeriesKey.R1:
case SeriesKey.R2:
case SeriesKey.R3:
case SeriesKey.R4:
case SeriesKey.R5:
return DateHelper.PreviousOrCurrentQuarterEnd(targetDate);
}
return base.ResolveDate(comparisonSeries, targetDate);
}
[TestMethod]
public void SomeTestMethod()
{
var mockIAppCache = new Mock<IAppCache>();
var mockISeries = new Mock<ISeries>();
ReportFR2 report = new ReportFR2(SeriesKey.FR2, mockIAppCache);
DateTime resolvedDate = report.ResolveDate(mockISeries, DateTime.Now);
//Assert.AreEqual("something", "something");
}
Или я хочу вызвать статический метод в моем тестируемом методе? Я думаю, что ответ отрицательный, потому что единичный тест проверяет только логику в тестируемом методе и ничего другого, кроме его частного метода. Кто-то поправьте меня, если я ошибаюсь! – user1186050
Оберните DateHelper интерфейсом и введите свой IDateHelper в качестве параметра метода в содержащем классе или в качестве аргумента конструктора так же, как вы делаете withIAppCache? –
Что было бы лучше? 1) оберните DateHelper интерфейсом и передайте его или 2) изолируйте статический метод в методе «защищенный внутренний виртуальный» в классе, а затем я мог бы издеваться над этим методом. – user1186050