2

WebAPI 컨트롤러에 대한 일부 단위 테스트를 작성 중이며 매개 변수가 일치한다는 것을 주장하고 싶습니다.WebAPI의 단위 테스트 작업 매개 변수

잘 작동하는 Filip Wojcieszyn's blog에 사용 된 방법을 따라했지만 지금은 그 주장을 확장하려고합니다.

나는 (의 세 가지가 실제 사용을 통해 확인되었습니다) 컨트롤러에 세 가지 작업을해야 : 문제는

[HttpGet] 
public IEnumerable<Task> Get() 

[HttpGet] 
public IEnumerable<Task> Get(string elementType) 

[HttpGet] 
public Task Get(long id) 

그리고 다음 코드를

var actionSelector = new ApiControllerActionSelector(); 
var descriptor = actionSelector.SelectAction(_controllerContext); 
return descriptor.GetParameters(); 

이 때 I 매개 변수없는 경로에 대한 설명자 .GetParameters()는 "긴 ID"매개 변수 인 1 개의 매개 변수를 포함하는 모음을 반환합니다.

다른 사람이이 두 가지 중 어느 것도 반환하지 않는 이유를 설명 할 수있는 사람이 있습니까? 그리고 과부하 가능성을 얻을 수 있다면?

답변

3

문제의 원인은 호출 된 경로가 충분히 구체적이지 않은 것이 원인이었습니다. 가져 오기의 3 오버로드

  • 내가 ID 매개 변수는 컨트롤러에서
  • 선택 사양 일 수 경로를 가지고있다().
  • 'id'매개 변수가 지정되지 않았지만 'id'매개 변수가 선택 사항이므로이 메서드가 적합하기 때문에 Get (long id) 동작을 선택했습니다. 내가 찾던 때문에 예기치 않은 -

은 WebAPI이 경우 예기치 않은 동작이 선택되고 있었다

var descriptor = actionSelector.SelectAction(_controllerContext); 

코드의 줄에 그 의미와 일치하는 매개 변수의 가장 큰 수와 방법을 선택 Get()하고 Get (long id)를 받았다.

이 문제를 해결하기 위해 필자는 구성된 경로를 2 개로 분할했습니다. 첫 번째 경로는 'id'매개 변수 (즉, 비 필수)와 'id'매개 변수를 허용하지 않는보다 일반적인 경로를 기대합니다.

모든 것이 제자리에 떨어졌습니다.

+0

이것은 정확하게 나와 함께 발생합니다. – Skadoosh

+0

기본 경로 전후에 해당 경로를 넣었습니까? 나는 Get()과 Get (id)를 치는 두 개의 테스트를 가지고있다. 기본 경로 앞에 경로를 배치하면 두 번째 테스트가 실패합니다. 기본 경로 다음에 경로를 지정하면 첫 번째 테스트가 실패합니다. – Skadoosh

+0

기본 경로가 가장 일반적이어야하므로 기본 경로가 마지막 경로 여야합니다. – awj

관련 문제