2013-08-08 3 views
0

안녕하세요. MVC 컨트롤러에서 JsonResult를 반환하고 반환 된 결과를 단위 테스트하고 싶습니다.Json이 유닛 테스트에서 객체로 인식되지 않습니다.

 return Json(new 
     { 
      error, 
      viewModel, 
      contextId = viewModel.ContextId 
     }); 

을 다음과 내 단위 테스트 코드를 내 웹 패키지에 모두있는 nuget 패키지 JSon.Net & JSON-JS json2을 추가 한

 var expectedJson = Json(new 
     { 
      error, 
      viewModel, 
      contextId = viewModel.ContextId 
     }); 

같이 내 컨트롤러 코드입니다. 왜 이것이 작동하지 않는 지 모르겠습니다. 내 컨트롤러에 대한

내 사용 지침은

using System.Collections.Generic; 
using System.IO; 
using System.Linq; 
using System.Web; 
using System.Web.Mvc; 
using Ionic.Zip; 
using ReferenceData.Web.Services; 
using ReferenceData.Web.ViewModels; 

하고 내 단위 테스트에 대한 사용 지침은

using System; 
using System.Collections.Generic; 
using System.IO; 
using System.Web; 
using System.Web.Mvc; 
using Moq; 
using NUnit.Framework; 

컨트롤러 방법은 JsonResult을 반환합니다. 내 Unit 테스트에서 JsonResult.Data와 비교할 수있는 객체를 만들려고합니다.

// act 
JsonResult response = controller.doSomething() 
// assert 
Assert.AreEqual(response.data, expectedJson) 

바라건대 눈의 신선한 세트가 도움이 될 것입니다. Json을 사용하는 것에 익숙하지 않은 이유는 오리지널 컨트롤러가 다른 누군가에 의해 작성 되었기 때문입니다.

+0

정확한 오류 란 무엇인가요? –

+0

단위 테스트의 코드는 무엇입니까? –

+0

@SamLeach 정확한 오류는 "Can not Resolve Symbol Json"입니다. 그것은 정말로 누락 된 참조와 관련이있는 것처럼 보입니다. –

답변

0

내 실수는 내가이

 var expectedJson = new 
     { 
      error, 
      viewModel, 
      contextId = viewModel.ContextId 
     }; 
처럼 선언해야 내 테스트에서

Var x = Json(new ... 

을 사용하고 있었다 확인

Json은 Controller에서 상속 된 메서드이므로 내 단위 테스트에서 작동하지 않습니다. 그런 다음 JsonResult.data의 요소에 접근하기 위해 내가 동적를 사용하여이

dynamic response = controller.doSomething() as dynamic; 

를했던 나에게 JSON의 요소에 액세스 할 수 있습니다 내가 직접에 대해 테스트 할 수 있습니다. 여전히 완벽하게 작동하지는 않지만 테스트 또는 테스트중인 코드에 문제가 있는지 확실하지 않습니다.

0

단위 테스트에서 JsonResult을 사용하여 베팅하고 싶습니다.

JsonResult result = controller.ReturnSomeJson() as JsonResult; 

this을 참조하십시오. 당신이 Assert.AreEqual를 사용하는 경우

+0

안녕하세요, 저는 단위 테스트 패키지와 System.Web.MVC에 대한 참조를 확인했으며 사용하고 있습니다. 내 CS 파일에 대한 지시문 –

+0

내 대답을 편집했습니다. 'JsonResult'를 사용하십시오 –

+0

죄송합니다. 아마도 제 컨트롤러 메서드가 실제로 JsonResult를 반환한다고 설명 했어야합니다. 나는 JsonResult.data와 비교할 수있는 무언가를 만들고 싶어한다. –

0

익명 형식을 반환 할 때 리플렉션을 사용하는 것이 가장 좋은 방법입니다.

var result = this.Controller.Method() as JsonResult; 

var viewmodel = result.Data.GetType().Getproperty("viewModel").GetValue(result.Data,null);  

Assert.AreEqual(viewmodel, expectedviewmodelValue); 

참고 : 디버그 및 히트를 중단 점을 배치하고 경우에 의해, result 내부가 무엇을보고, 바로 "Quick Watch"을 선택, 클릭 "결과"를 선택합니다. result.Data으로 확장하십시오. 내부의 value 속성과 유형을 확인하십시오. 그런 다음 .GetProperty("HERE")을 수정하십시오. return JSON(...)은 확실하지 않지만 return JsonResult은 일반적으로 사용됩니다.

관련 문제