Задать вопрос
@stcmd04236

Почему выдается NullReferenceException при создании объекта?

Добрый день! Пишу тест для контроллера AccountController который генерируется при создании проекта. Когда запускаю проект и вручную передаю данные работает без ошибок. Но при интеграционном тестировании выдает ошибку на null когда создается класс ApplicationUser.
Вот метод который создает пользователя

public async Task<IHttpActionResult> Register(RegisterBindingModel model)
        {

            if (!ModelState.IsValid)
                return BadRequest(ModelState);

            // вот здесь выдается ошибка на null
            var user = new ApplicationUser()
            {
                UserName = model.Email,
                Email = model.Email,
                PhoneNumber = string.IsNullOrEmpty(model.PhoneNumber) ? string.Empty : model.PhoneNumber
            };

            IdentityResult result = await UserManager.CreateAsync(user, model.Password);

            if (!result.Succeeded)
                return GetErrorResult(result);

            if (model.OwnerId.HasValue)
            {
                if (!model.OwnerId.Value.Equals(User.Identity.GetUserId<int>()))
                    return Unauthorized();
                await UserManager.AddToRoleAsync(user.Id, "user");
            }
            else
                await UserManager.AddToRoleAsync(user.Id, "admin");
            
            return Ok();
        }


Именно при создании класса выдается ошибка. Но внутри тут кроме присвоения значения ничего нет. В конструкторе тоже ничего не задано.

А это тест

[TestClass]
    public class AccountControllerTest
    {

        protected TestServer Server;

        [TestInitialize]
        public void Setup()
        {
            Server = TestServer.Create(app =>
            {
                HttpConfiguration config = new HttpConfiguration();
                WebApiConfig.Register(config);
                
                app.UseWebApi(config);
            });
        }

        [TestCleanup]
        public void TestDispose()
        {
            if(Server != null)
                Server.Dispose();
        }


        [TestMethod]
        public async Task Register()
        {
            var registerBindingModel = new RegisterBindingModel()
            {
                PhoneNumber = "+71231234567",
                Password = "Example_123456",
                ConfirmPassword = "Example_123456",
                Email = "example@mail.com"
            };
            

            string jsonContent = JsonConvert.SerializeObject(registerBindingModel);

            var response = await Server.HttpClient.PostAsync("api/Account/Register", new StringContent(jsonContent, Encoding.UTF8, "application/json"));

            var result = response.Content.ReadAsStringAsync().Result;
            Console.Out.WriteLine("Http operation unsuccesfull");
            Console.Out.WriteLine($"Status : {response.StatusCode}");
            Console.Out.WriteLine($"Reason : {response.ReasonPhrase}");
            Console.Out.WriteLine($"Content: {result}");
            Console.Out.WriteLine(response);
                
            Assert.AreEqual(HttpStatusCode.OK, response.StatusCode, result);
        }
    }


Подозреваю что у меня с тестом что то не так. Не правильно пишу тест.
  • Вопрос задан
  • 297 просмотров
Подписаться 2 Оценить 2 комментария
Пригласить эксперта
Ответы на вопрос 1
Maronus
@Maronus
Попробуйте добавить атрибут FromBody

public async Task<IHttpActionResult> Register([FromBody] RegisterBindingModel model)
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы