2016-12-20 12 views
1

Я создаю службу api, используя asp.net web api. Я пытаюсь проверить мой контроллер, используя малое количество заказа, но я получаю следующую ошибкуASP.NET Контроллер unittest с использованием ошибки проверки Moq

Ожидаемый вызов на макет, по крайней мере один раз, но никогда не было выполнено: х => x.CreateIncome())

Это испытание ниже

[TestClass] 
public class IncomeControllerTests 
{ 
    private Mock<IIncomeService> _incomeServiceMock; 
    [TestInitialize] 
    public void BeforeEachTest() 
    { 
     _incomeServiceMock = new Mock<IIncomeService>(); 

     _incomeServiceMock 
      .Setup(x => x.CreateIncome(It.IsAny<Income>())).Verifiable(); 
    } 

    [TestMethod] 
    public void Income_Is_Saved_Successfully() 
    { 
     var incomeController = new IncomeController(_incomeServiceMock.Object); 
     Income newIncome = { 
      Description = "Income1", 
      Amount = 22300, 
      Id = 221, 
      StaffId = sampleManager.Id, 
      Staff = sampleManager, 
      DateCreated = DateTime.Now 
     } 

     incomeController.Post(newIncome); 
     _incomeServiceMock.Verify(x => x.CreateIncome(newIncome)); 
    } 
} 

служба, используемая в этом контроллере вводится в моем IncomeController показано ниже

IncomeController.cs

[Authorize] 
public class IncomeController : ApiController 
{ 
    private IIncomeService _incomeService; 
    public IncomeController(IIncomeService service) 
    { 
     _incomeService = service; 
    } 

    public void Post([FromBody]Income values) 
    { 
     Income income = new Income(
      values.Description, 
      values.Amount, 
      values.StaffId 
      ); 

     _incomeService.CreateIncome(income); 
    } 
} 

IIncomeService.cs

public interface IIncomeService 
{ 
    void CreateIncome(Income income); 
    Income GetIncome(int id); 
    List<Income> GetAllIncome(); 
    Dictionary<string, int> GetMonthlyIncome(); 
    Dictionary<string, int> GetYearlyIncome(); 
    void Update(Income income); 
} 

ответ

3

Проблема заключается в том, что вы пытаетесь проверить, используя newIncome объект, но в Post методе вы экземпляр другого экземпляра Income и проход что обслуживать. Эти случаи не совпадают.

Вы можете изменить проверить заявление что-то вроде:

_incomeServiceMock.Verify(x => x.CreateIncome(It.IsAny<Income>())); 

или

_incomeServiceMock.Verify(x => x.CreateIncome(It.Is<Income>(inc=> 
    inc.Description == newIncome.Description 
    && inc.Amount == newIncome.Amount 
    && inc.StuffId == newIncome.StuffId))); 
+0

Да вы так хорошо. Сейчас работает. благодаря –