2015-10-08 1 views
0

Я пытаюсь выполнить тестирование моего приложения ASP MVC, но мой тест завершился неудачно с сообщением Message: Assert.AreEqua failed. Expected:<>. Actual: <Error>.ASP MVC Test Assert «Ожидаемый <>» Неожиданный

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

Мой тестовый класс:

[TestClass] 
public class ErrorControllerTest 
{ 
    [TestMethod] 
    public void TestErrorView() 
    { 
     var repositoryMock = new Mock<IErrorRepository>(); 
     var errors = new List<ErrorModel>(); 
     errors.Add(new ErrorModel() 
     { 
      Id = "id", 
      Message = "message" 
     }); 

     repositoryMock.Setup(r => r.GetErrors()).Returns(errors); 
     var controller = new ErrorController(repositoryMock.Object); 

     var result = (ViewResult) controller.Error(1); 

     Assert.AreEqual(result.ViewName, "Error"); 
     repositoryMock.VerifyAll(); 
    } 
} 

Для хорошей мерой, это контроллер испытываемого:

public class ErrorController : Controller 
{ 
    private readonly IErrorRepository errorRepository; 

    public ErrorController(IErrorRepository errorRepository) 
    { 
     this.errorRepository = errorRepository; 
    } 

    public ActionResult Error(int? page) 
    { 
     var errors = errorRepository.GetErrors(); 

     //// stuff for paging 
     int pageSize = 10; 
     int pageNumber = (page ?? 1); // if there is no page, return page 1 

     return View(errors.ToPagedList(pageNumber, pageSize)); 
    } 
} 

И репозиторий:

public interface IErrorRepository 
{ 
    List<ErrorModel> GetErrors(); 
} 

public class ErrorRepository : IErrorRepository 
{ 
    public ErrorModel Errors { get; set; } 
    public List<ErrorModel> ErrorList { get; set; } 

    public List<ErrorModel> GetErrors() 
    { 
     string cs = "Data Source=" + "some path"; 

     using (SQLiteConnection con = new SQLiteConnection(cs)) 
     { 
      var listOfErrors = new List<ErrorModel>(); 
      string stm = "SELECT * FROM Error"; 
      con.Open(); 

      using (SQLiteCommand cmd = new SQLiteCommand(stm, con)) 
      { 
       using (SQLiteDataReader rdr = cmd.ExecuteReader()) 
       { 
        while (rdr.Read()) 
        { 
         listOfErrors.Add(new ErrorModel 
         { 
          Id = rdr["ID"].ToString(), 
          Message = rdr["Message"].ToString() 
         }); 
        } 

        rdr.Close(); 
        ErrorList = listOfErrors; 
       } 
      } 

      con.Close(); 
     } 

     return ErrorList; 
    } 
} 
+1

Если это 'Assert.AreEqual (result.ViewName, "Ошибка");' 'дает ожидаемый: < >. Фактически: 'тогда у вас есть свои аргументы вокруг неправильного пути. Каждая тестовая среда делает это по-другому (в пределах 2-х опций, очевидно) - проверьте intellisense, но это, вероятно, должно быть «Assert.AreEqual (« Ошибка », result.ViewName);'. Не объясняет, почему это пусто. –

ответ

1

Я не знаю, каков результат, который вы получаете от этого result.ViewName, но он должен быть равен тексту "Error", чтобы пройти тест. В противном случае вы должны изменить этот "Error" на фактический результат и result.ViewName до ожидаемого результата.

Assert.AreEqual(result.ViewName, "Error"); 

Помните: Assert.AreEqual(ожидаемый результат, фактический результат);

Если вы до сих пор путают см мой пример кода ниже, чтобы вы увидеть более четкое представление.

Это мой ожидаемый результат: http://prntscr.com/8p0r03

и это мой реальный результат: http://prntscr.com/8p0qnj

+0

Ах да, я полностью понял ваш ответ :). Я просто ошеломлен, почему мой тест не проходит. Когда я просто запускаю приложение, я получаю ожидаемое представление, но я не знаю, почему мой модульный тест не получил его. – Khaine775

1

При использовании Assert.AreEqual (), вы всегда должны сначала поставить значение, t фактическое значение, иначе ваши результаты могут запутаться. То, что ваш тест означает сказать, что result.ViewName пуст, когда он ожидал, что это будет «Ошибка». Ваша конфигурация правильная (помимо этого небольшого количества), и она выделяет либо a) ошибку в вашем коде где-то, либо b) ваше убеждение в том, что result.ViewName должен быть «Ошибка» неверен.

Смежные вопросы