2013-02-26 5 views
1

Я начал работать над частично законченным веб-проектом MVC, и теперь моя задача - охватить код модульными тестами. Проект имеет хранилище БД и нестатический класс репозитория, содержащий операции CRUD. Чтобы проверить эти операции CRUD, мне нужно высмеять реальный класс репозитория с помощью FakeRepository, поэтому я создал IRepository и использовал IoC для его ввода ...Unit testing DB repositoty class под множеством статических помощников

Но проблема в том, что в проекте также много статических классов с большим количеством статических методы (помощники), которые расширяют основные операции CRUD, и все контроллеры в приложении работают с этими статическими помощниками, которые внутренне создают класс репозитория ...

Пробовал модифицировать все статические методы для передачи IRepository из контроллеров, но есть много помощники, основанные на других статических помощниках и т. д. Это не работает! У меня нет времени переписывать весь этот беспорядок ...

Так что мне нужно и совет, как я могу проверить все эти помощники, но с фальшивым экземпляром IRepository?

+0

Какая версия и выпуск Visual Studio вы используете? У вас есть доступ к подделькам VS2012? – jessehouwing

+0

Visual Studio 2012. Да, у меня есть доступ к подделкам, но AFAIK невозможно подделать статический класс ... –

ответ

0

You can create s Shim (from Microsoft Fakes) to override the behavior of a static method.

код будет выглядеть примерно так:

[TestClass] 
public class TestClass1 
{ 
     [TestMethod] 
     public void TestCurrentYear() 
     { 
      int fixedYear = 2000; 

      // Shims can be used only in a ShimsContext: 
      using (ShimsContext.Create()) 
      { 
       // Arrange: 
       // Shim DateTime.Now to return a fixed date: 
       System.Fakes.ShimDateTime.NowGet = 
       () => 
       { return new DateTime(fixedYear, 1, 1); }; 

       // Instantiate the component under test: 
       var componentUnderTest = new MyComponent(); 

       // Act: 
       int year = componentUnderTest.GetTheCurrentYear(); 

       // Assert: 
       // This will always be true if the component is working: 
       Assert.AreEqual(fixedYear, year); 
      } 
     } 
}