내 ApiController에 대한 일부 단위 테스트를 작성하려고하는데 몇 가지 문제가 있습니다. 여기 웹 api에서 Request.form을 조롱하는 방법
이 나는 사람이 문제를 해결하기 위해 아이디어를 가질 수var formData = HttpContext.Current.Request.Form["FormData"];
에 모의 데이터를 전달하려는
public int CustomerAdd()
{
var localhost = HttpContext.Current.Request.Url.Authority;
var formData = HttpContext.Current.Request.Form["FormData"];
JavaScriptSerializer json_serializer = new JavaScriptSerializer();
var customer = json_serializer.Deserialize<Customer>(formData);
if (HttpContext.Current.Request.Files.Count > 0)
{
HttpPostedFile file = HttpContext.Current.Request.Files[0];
string fileName = customer.CustomerName.Trim() + "_" + file.FileName;
var filePath = HttpContext.Current.Server.MapPath(Constants.FileUploadImagePath + fileName);
file.SaveAs(filePath);
customer.Logo = fileName;
}
return _iCustomerService.Add(customer);
}
처럼 내 컨트롤러 코드가 보인다 내 TestMethod
[TestMethod]
public void CustomerController_AddUnitTest()
{
var custid = Guid.NewGuid();
var customers = new Customer() { CustomerName = "Enterprise", CustomerId = custid };
var rmContext = MockRepository.GenerateMock<HttpContextBase>();
var rmRequest = MockRepository.GenerateMock<HttpRequestBase>();
rmContext.Stub(x => x.Request).Return(rmRequest);
var FormData = new NameValueCollection { { "FirstName", "Jonathan" }, { "LastName", "Danylko" } };
rmRequest.Stub(r => r.Form).Return(FormData);
rmContext.Stub(p => p.Request).Return(rmRequest);
var forms = rmContext.Request.Form;
> // here i am able to get forms value but i couldn't pass these value
> to main controller
var mockRepository = MockRepository.GenerateMock<ICustomerService>();
mockRepository.Stub(x => x.Add(new Customer())).IgnoreArguments().Return(1);
_customerController = new CustomerController(mockRepository);
var result = _customerController.CustomerAdd();
Assert.IsNotNull(result);
}
입니다 나는이 일에 실망했다.
테스트중인 메서드는 잘못 설계되어 정적 종속성과 밀접하게 연결되어 테스트하기가 어렵습니다. 코드를 HttpContext에 단단히 연결하는 것을 피하십시오. – Nkosi
예, 알고있었습니다. 하지만이 코드 줄을 조롱하는 방법을 모르겠다. –
var formData = HttpContext.Current.Request.Form [ "FormData"]; –