developer tip

moq 객체 반환 메서드, null 객체를 반환해야 함

optionbox 2020. 11. 26. 08:11
반응형

moq 객체 반환 메서드, null 객체를 반환해야 함


저는 웹 API를 개발 중이며 제가 생각 해낸 테스트 중 하나는 클라이언트가 Physical Test ID (Physical Test는 제가 찾고있는 리소스)로 GET 작업을 수행하고 해당 물리적 ​​테스트를 찾을 수 없다는 것입니다. , 웹 API는 404 상태를 반환해야합니다.

이제 테스트에 moq 프레임 워크를 사용하고 있으며 다음 코드가 있습니다.

[TestMethod]
public void then_if_physical_test_not_found_return_not_found_status()
{
    var unitOfWork = new Mock<IUnitOfWork>();
    var repository = new Mock<IRepository<PhysicalTest>>();
    repository.Setup(r => r.FindById(It.IsAny<int>())).Returns();
    unitOfWork.Setup(m => m.PhysicalTests).Returns(repository.Object);
    var pt = new PhysicalTestResource(unitOfWork.Object);
    HttpResponseMessage<PhysicalTest> response = pt.GetPhysicalTest(43);
    Assert.AreEqual(HttpStatusCode.NotFound, response.StatusCode)
}

리소스를 찾을 수없는 경우 실제 API 메서드가 반환 할 null 개체를 반환하려면 Returns () 메서드가 필요합니다.

Return () 메서드에서 매개 변수로 null을 보내려고했지만 성공하지 못했습니다.


오류가 무엇인지 표시하지 않지만 작동합니다.

unitOfWork.Setup(m => m.PhysicalTests).Returns((IRepository<PhysicalTest>)null);

나는 당신이 그것을 호출하려고 시도했는데 Returns(null), 이로 인해 컴파일러 Returns가 오버로드되고 어떤 메서드를 호출 해야하는지 알지 못하기 때문에 불평 합니다. 특정 유형으로 캐스트하면 모호성이 제거됩니다.


rt 반환 유형의 메서드입니다. FindById

repository.Setup(r => r.FindById(It.IsAny<int>())).Returns(Task.FromResult((rt)null));

참고 URL : https://stackoverflow.com/questions/7919679/moq-objects-returns-method-should-return-a-null-object

반응형