반응형
.NET 코어 MVC 컨트롤러의 단위 테스트를 위해 HttpContext를 모의 포장합니까?
http 요청의 헤더에 값을 기대하는 단위 테스트 인 컨트롤러에 기능이 있습니다. 읽기 전용이기 때문에 HttpContext를 초기화 할 수 없습니다.
내 컨트롤러 함수에는 "device-id"에 대한 http 요청 헤더 값이 필요합니다.
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
//not valid controller.HttpContext is readonly
//controller.HttpContext = new DefaultHttpContext();
var result = controller.Get();
Assert.AreEqual(result.Count(), 2);
}
보관 라이브러리를 사용하지 않고 수행하는 간단한 방법이 있습니까?
이 방법으로 httpcontext 및 헤더를 초기화 할 수 있습니다.
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
controller.ControllerContext = new ControllerContext();
controller.ControllerContext.HttpContext = new DefaultHttpContext();
controller.ControllerContext.HttpContext.Request.Headers["device-id"] = "20317";
var result = controller.Get();
//the controller correctly receives the http header key value pair device-id:20317
...
}
HTTPContext를 조롱하는 것보다 헤더를 전달하는 매개 변수에 매핑하는 것이 더 나은 생각 일 것입니다. 예를 들어이 답변의 맨 아래에있는 컨트롤러 에서 id
매개 변수는 "device-id"와 같은 이름의 값 헤더로 설정됩니다. 그러면 단위 테스트는 다음과 같이됩니다.
[TestMethod]
public void TestValuesController()
{
ValuesController controller = new ValuesController();
var result = controller.GetHeaderValue("27");
Assert.AreEqual(result, "27");
}
으로 HttpContext 를 조롱 할 수는 있지만 제 생각에는 선택의 여지가없는 한 피해야 할을 구석으로입니다. FromHeaderAttribute에 대한 설명서는 FromHeaderAttribute 클래스 에서 사용할 수 있습니다 .
public class ValuesController: Controller
{
public string GetHeaderValue([FromHeader(Name = "device-id")] string id)
{
return id;
}
}
반응형
'ProgramingTip' 카테고리의 다른 글
pandas 데이터 프레임 그룹 별 datetime 월 (0) | 2020.11.19 |
---|---|
이 컬렉션 인스턴스에 [title] 속성이 없습니다. (0) | 2020.11.19 |
Python 라이브러리 경로 (0) | 2020.11.19 |
SQL : 하나의 열에 null 값이있을 때 3 개의 열을 더 많이? (0) | 2020.11.19 |
ArrayList에는 대소 문자 구분이 포함됩니다. (0) | 2020.11.19 |