2016-11-10 10 views
1

Мой клиент хочет иметь 100% -ный охват кода для всех проектов. Я написал несколько тестовых примеров очень давно для использования веб-API с помощью nUnit. Но мой клиент решил использовать xUnit как единую тестовую инфраструктуру, используя Moq как фреймворк Mock.Письменные блок-тесты для проекта Sitecore

Как я никогда не работал на модульном испытательном стенде для проекта sitecore, может ли кто-нибудь пожелать рассказать нам об этом? Как начинающий кулер, пожалуйста, напишите образец теста для метода ниже? Мы используем GlassMapperFramework как ORM.

public class RegistrationController : GlassController 
    { 
    public ActionResult RegistrationInitiation() 
      { 
       var someobject = GetDataSourceItem<IRegistrationMainContent>(); 

       return View(someobject); 
      } 
} 
+0

Он-лайн поиск найдено [Unit testing Sitecore MVC] (https://mhwelander.net/2014/04/30/unit-testing-sitecore-mvc/) – Nkosi

+0

Онлайн-поиск найден [Life Through a Lens - Unit Testing с стеклянными контроллерами] (https://cardinalcore.co.uk/2015/09/29/life-through-a-lens-unit-testing-with-glass-controllers/) – Nkosi

+0

Да, попробовал несколько вещей, но им пришлось столкнуться с проблемой в то время как инициализация контроллера контроллера. Исключением является что-то вроде, зависимость GlassController не выполняется. – PaRsH

ответ

1

Чтобы проверить свои контроллеры, вы захотите ввести Контекст Sitecore в контроллер. У GlassController есть метод перегрузки на нем GlassController (ISitecoreContext). Это используется для проверки работоспособности контроллеров. Она также имеет другие перегрузки, если это необходимо ...

Вот более полный код, который нужен модульное тестирование контроллера

private Mock<IRegistrationModel> RegistrationModel { get; set; }; 
private RegistrationController Controller { get; set; } 

[TestInitialize] 
public void Setup() 
{ 
    var mockSitecoreContext = new Mock<ISitecoreContext>(); 
    this.RegistrationModel = new Mock<IRegistrationModel>(); 

    this.RegistrationModel.SetupAllProperties(); 

    mockSitecoreContext.Setup(sc =>sc.GetItem<IRegistrationModel 
     (It.IsAny<string>(), false, false)). 
     Returns(this.RegistrationModel.Object); 

    this.Controller = new RegistrationController {SitecoreContext = 
     mockSitecoreContext.Object } 
} 

[TestMethod] 
public void Your_Unit_Test_Name() 
{ 
    //....perform unit test here 
    this.Controller.SitecoreContext = null; 

    var result = this.Controller.GetIndex() as ViewResult; 

    //Assert .... 
} 

Позволь мне знать, если у вас есть вопросы!

+0

В приведенном выше коде регистрационный контроллер вызывается без аргументов. Который дает ошибку времени компиляции. Я пробовал controller = new RegistrationController (sitecoreContextMock.Object). Но он «работал», так как не решал зависимость для GlassController. Здесь есть упоминание, что я использую GlassController, а не контроллер mvc. Есть идеи? – PaRsH

+0

PaRsH, я прошу прощения за задержанный ответ. Я изменил код выше. Приведенный выше код должен дать вам более полное представление о модульном тестировании с помощью GlassController, если вы наследуете его. Если вы этого не сделаете, вы сможете заменить RegistratioController на GlassController. –

 Смежные вопросы

  • Нет связанных вопросов^_^