2016-07-05 5 views
0

Я пытаюсь проверить метод, который полагается на значение одного из полей в моей модели (используется как параметр). Я ищу помощь в том, как издеваться над этим значением, поэтому мой модульный тест будет работать.
Без установки этого значения тест будет следовать пути к исключению.Moq - указать значение параметра

CONTROLLER

public class StatusViewerController : Controller 
{ 
    private IERERepository _ereRepository; 

    //Dependency Injection 
    public StatusViewerController(IERERepository ereRepository) 
    { 
     _ereRepository = ereRepository; 
    } 



    [HttpPost] 
    [ValidateAntiForgeryToken] 
    public ActionResult Edit([Bind(Include = "RecordID,ClientNumber")] StatusViewerFormViewModel model) 
    { 
     if (ModelState.IsValid) 
     { 
      try 
      { 
       //Send to one of two functions depending on RecordID value 
       if (model.RecordID == null) 
       { 
        _ereRepository.StatusViewerInsert(model); 
       } 
       else 
       { 
        _ereRepository.StatusViewerUpdate(model); 
       } 

       return new HttpStatusCodeResult(HttpStatusCode.OK); 
      } 
      catch 
      { 
       throw new HttpException(500, "Internal Server Error"); 
      } 
     } 
     else 
     { 
      throw new HttpException(400, "ModelState Invalid"); 
     } 
    } 
} 

БЛОК TEST

/// <summary> 
/// Tests the Edit method for ActionResult return type 
/// </summary> 
[TestMethod] 
public void StatusViewer_Edit_Returns_ActionResult() 
{ 
    //Arrange 
    var mockRepository = new Mock<IERERepository>(); 

    StatusViewerController controller = new StatusViewerController(mockRepository.Object); 


    //Act 
    //I need to set the value of RecordID here or else this test will fail 
    //It will return an exception 
    ActionResult result = controller.Edit(It.IsAny<StatusViewerFormViewModel>()); 


    //Assert 
    Assert.IsInstanceOfType(result, typeof(ActionResult)); 
} 

ответ

1

Просто создать модель и вызвать метод при тестировании.

Что вы еще не сделали, это настроить свою зависимость для контроллера.

/// <summary> 
/// Tests the Edit method for ActionResult return type 
/// </summary> 
[TestMethod] 
public void StatusViewer_Edit_Returns_ActionResult() 
{ 
    //Arrange 
    var mockRepository = new Mock<IERERepository>(); 
    mockRepository 
     .Setup(m => m.StatusViewerInsert(It.IsAny<StatusViewerFormViewModel>()) 
     .Verifiable(); 

    var controller = new StatusViewerController(mockRepository.Object); 

    var model = new StatusViewerFormViewModel { 
     RecordID = "set the value of RecordID here", 
     ClientNumber = "Other property value here", 
     //...other properties 
    }; 

    //Act 
    ActionResult result = controller.Edit(model); 


    //Assert 
    Assert.IsInstanceOfType(result, typeof(ActionResult)); 
    mockRepository.Verify();//verify that the repository was called. 
}