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