2016-11-10 4 views
1

고객이 모든 프로젝트에 대해 100 % 코드 커버리지를 원합니다. nUnit을 사용하는 웹 API의 테스트 케이스를 아주 오래 작성했습니다. 그러나 내 고객은 xUnit을 Mock 프레임 워크로 Moq를 사용하여 단위 테스트 프레임 워크로 사용하기로 결정했습니다.Sitecore 프로젝트 용 단위 테스트 사례 작성

내가 sitecore 프로젝트에 대한 단위 테스트 사례를 본 적이 없으므로 누구나 접근 방식을 밝힐 수 있습니까? 시작 coudl 누군가가 아래의 방법에 대한 예제 테스트 케이스를 작성하시기 바랍니다? 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)가 있습니다. 이것은 Unit Test에 사용됩니다. 또한 여기에 ...

를 필요한 경우 다른 오버로드를 가지고 당신이 컨트롤러를 단위 테스트 할 필요가보다 완벽한 코드

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

위의 코드에서 Registrationcontroller는 인수없이 호출됩니다. 어떤 컴파일 시간 오류가 발생합니다. 컨트롤러 = 새 RegistrationController (sitecoreContextMock.Object)를 시도했습니다. GlassController에 대한 의존성을 해결하지 못했기 때문에 효과가있었습니다. 여기서 언급 할 것은, 저는 mvc 컨트롤러가 아닌 GlassController를 사용하고 있습니다. 어떤 생각? – PaRsH

+0

PaRsH, 지연된 응답에 사과드립니다. 위의 코드를 수정했습니다. 위의 코드는 GlassController를 상속 한 경우 GlassController를 사용하여 단위 테스트에서 더 많은 통찰력을 제공합니다. 그렇지 않은 경우 RegistratioController를 GlassController로 교체 할 수 있어야합니다. –