api mvc运行的单元测试失败并且调试工作

时间:2019-02-22 16:41:02

标签: c# asp.net-mvc api unit-testing web-api-testing

我具有用于在Api Web MVC项目中测试控制器的下一个UnitTest定义:

public class PersonsControllerTest
{
    Api.Controllers.PersonsController controller;
    IPersonsRepository repository;

    public PersonsControllerTest()
    {
        AutoMapper.Mapper.Initialize(cfg =>
        {
            ProjectPersons.Model.MapConfiguration.Configure(cfg);
        });

        this.repository = ProjectPersons.Model.ProjectPersonsServiceLocator.Get<IPersonsRepository>();
        this.controller = new Api.Controllers.PersonsController(repository);
    }


    [TestMethod]
    public void GetPersons()
    {
        IEnumerable<PersonsVO> response = controller.index();

        Assert.IsNotNull(response);
        //Assert.IsInstanceOfType(response, GetType(IEnumerable<PersonsVO>));            
    }

    [TestMethod]
    public void CreatePerson()
    {
        string name = "Juan Perez";
        string about = "Gran Empleado";

        PersonsVO person = new PersonsVO()
        {
            Name = name,
            About = about,
        };

        IHttpActionResult response = controller.add(person);

        Assert.IsNotNull(response);
        Assert.IsTrue((response.GetType() == typeof(OkNegotiatedContentResult<PersonsVO>)));

        PersonsVO personCreated = ((OkNegotiatedContentResult<PersonsVO>)response).Content;

        Assert.AreEqual(name, personCreated.Name);
        Assert.AreEqual(about, personCreated.About);
    }
}

当我运行Test时,CreatePerson()会失败,但是如果我调试Test的CreatePerson(),它将起作用。

有什么主意吗?当我运行测试时,失败的断言是Assert.IsTrue((response.GetType()== typeof(OkNegotiatedContentResult)))),但是如果我调试测试,则断言是有效的。

add方法是这样的:

public IHttpActionResult add(PersonsVO person)
        {
            if (ModelState.IsValid)
            {
                if ( person.Id == null || person.Id == Guid.Empty)
                {
                    person.Id = Guid.NewGuid();
                }

                try
                {
                    if (personsRepository.GetAll().Where(c => c.Id == person.Id).Any())
                    {
                        PersonsVO personToUpdate = personsRepository.GetAll().Where(c => c.Id == person.Id).FirstOrDefault();

                        personToUpdate.Name = person.Name;
                        personToUpdate.About = person.About;

                        personsRepository.Update(personToUpdate);

                        return Ok(personToUpdate);
                    }
                    else
                    {
                        personsRepository.Add(person);
                        return Ok(person);
                    }
                }
                catch (Exception e)
                {
                    return BadRequest("One or more fields are incorrect");
                }
            }
            else
            {
                return BadRequest(ModelState);
            }

        }

最诚挚的问候...

0 个答案:

没有答案