2017-03-24 16 views
0

을 예상대로 작동하지 컨트롤러에 디버깅 할 때 리포지토리에 제대로 작동하는 것처럼 보이지만 메서드가 내 actionResult를 반환 할 때 null입니다. 따라서 응답도 null입니다.테스트 WebAPI이 컨트롤러는 내가 아래에있는 내 WebAPI 컨트롤러를 테스트 xUnit의를 사용하여 장치에 노력하고

이제 비슷한 컨트롤러와 테스트를 수행하고 컨트롤러가 개체 컬렉션을 반환하지 않는다는 주된 차이점이 있습니다. 많은 기록이 발견되었습니다).

이 코드를 실행하면 잘 동작하므로 내 마음 속에서 객체의 조롱과 객체 배열에 래핑되었을 때 응답으로 처리되는 방법이 잘못되었다고 느낍니다.

여기 뭔가 잘못 되었나요? 아니면 FakeItEasy에 문제가 있습니까?

+1

('새로운 {...}')하지만, 테스트 당신 응답을 객체 배열 ('object []')로 던지십시오. 제쳐두고 당신은 또한 컬렉션을 열거해야합니다. – Nkosi

+0

"내 actionResult가 null입니다.": 확실합니까? 나는'action'이 null이 아니라'actionResult'가 아니라고 생각합니다. 맞습니까? –

+0

FakeItEasy에 대해 잘 알고있는 것은 아니지만 테스트중인 클래스/메소드에 종속성이 어떻게 주입되고 있습니까? – Nkosi

답변

3

실험 결과가 OkNegotiatedContentResult<object[]> 일 것으로 예상 되나 실제로는 OkNegotiatedContentResult<(anonymous type)>을 반환합니다.

테스트가 맞다고 가정하면 컨트롤러는 익명 개체가 아닌 개체 배열을 반환해야합니다. 이것에

return this.Ok(new { users, numberOfRecords }); 

: 그래서 당신은이 라인을 변경해야합니다

작업에 익명 형식을 반환되기 때문이다
return this.Ok(new object[]{ users, numberOfRecords }); 
+0

감사합니다. 이것은 작동하는 것 같습니다, 그래서 그것은 오류가 다른 객체에 있도록 디버그 정보를 올바르게 보지 못했습니다. 익명의 객체를 사용하려면 동역학과 [assembly : InternalsVisibleTo ("TestProject.TestClass")] 속성을 사용해야합니다. 익명 유형 대신 객체 유형을 사용하면 컨트롤러에서 반환되는 것의 다른 이점이 있습니까? Angular 서비스에 의해 호출되는 WebAPI 컨트롤러임을 명심하십시오. – VasilisP

+0

@VasilisP 익명의 개체를 사용할 수 있다고 생각하지 않습니다. 어셈블리를 통해 공유 할 방법이 없습니다. 'InternalsVisibleTo'는 타입을 참조 할 방법이 없기 때문에 도움이되지 않습니다. 이름이 없기 때문입니다. –