컨트롤러 용 단위 테스트를 작성하려고합니다.apicontroller를 테스트하는 방법은 무엇입니까?
[HttpPost]
public Answer RegistrationSocial([FromBody] RegistrationSocialRequest newUser)
{
var answer = new Answer();
try
{
userProvider.RegistrationSocial(newUser.Email,
newUser.PhoneNumber,
newUser.SocialProviderId,
newUser.SocialProvider,
UserIP);
answer.Result = 0;
}
catch (Exception e)
{
answer.Result = 2;
answer.Description = "Server error";
}
return answer;
}
private string UserIP
{
get { return HttpContext.Current.Request.UserHostAddress; }
}
RegistrationSocialRequest는 모델 바인딩에 필요한 POCO 개체입니다. 이 메서드는 json을 반환하고 클라이언트가 작업 할 수 있도록 변경 내용을 추적하려고합니다. 테스트를 위해 Moq 및 MSTest를 사용합니다. 다음은 테스트 방법입니다.
[TestMethod]
public void IsJsonOkRegistrationSocial()
{
//Arrange
Mock<IUserProvider> mock = new Mock<IUserProvider>();
mock.Setup(m => m.RegistrationSocial("[email protected]",
"123",
"0987654321",
1,
"192.0.0.1"));
UserController controller = new UserController(mock.Object);
Answer answerOk = new Answer
{
Result = 0,
Caption = "Ok",
Description = null,
Data = null
};
//Action
var answer = controller.RegistrationSocial(new RegistrationSocialRequest
{
SocialProvider = 1,
Email = "[email protected]",
PhoneNumber = "123",
SocialProviderId = "0987654321"
});
//Assert
Assert.AreEqual(JsonConvert.SerializeObject(answerOk),
JsonConvert.SerializeObject(answer));
}
그러나 UserIP가 null이기 때문에 예외가 발생했습니다. 이유는 무엇입니까? 나는 단위 테스트에서 새롭다, 아마 이것 모두는 더 쉬운 방법으로 행해질 수 있었다.
엔지니어링을 넘어서는 경우도 있지만,이 솔루션은 효과가 있습니다. 고맙습니다. – Arthur