ASP MVC 测试断言 "Expected<>" 意外
ASP MVC Test Assert "Expected<>" Unexpected
我正在尝试对我的 ASP MVC 应用程序进行单元测试,但我的测试失败并显示消息 Message: Assert.AreEqua failed. Expected:<>. Actual: <Error>
。
现在,我假设这是因为我设置了错误的测试,但我找不到我可能遗漏了什么的地方。任何提示将不胜感激。我正在使用最小起订量。
我的测试class:
[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 是空的,而它预期它是 "Error"。您的配置是正确的(除了那个小问题),它突出显示了 a) 您代码中某处的错误,或者 b) 您认为 result.ViewName 应该是 "Error" 是不正确的。
我不知道你从这个 result.ViewName
得到的结果是什么,但它应该等于文本 "Error"
才能使你的测试通过。否则,您应该将 "Error"
更改为实际结果,将 result.ViewName
更改为预期结果。
Assert.AreEqual(result.ViewName, "Error");
记住:Assert.AreEqual(
预期结果、实际结果);
如果你还是一头雾水,请看下面我的示例代码,让你看得更清楚。
这是我的预期结果:
http://prntscr.com/8p0r03
这是我的实际结果:
http://prntscr.com/8p0qnj
我正在尝试对我的 ASP MVC 应用程序进行单元测试,但我的测试失败并显示消息 Message: Assert.AreEqua failed. Expected:<>. Actual: <Error>
。
现在,我假设这是因为我设置了错误的测试,但我找不到我可能遗漏了什么的地方。任何提示将不胜感激。我正在使用最小起订量。
我的测试class:
[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 是空的,而它预期它是 "Error"。您的配置是正确的(除了那个小问题),它突出显示了 a) 您代码中某处的错误,或者 b) 您认为 result.ViewName 应该是 "Error" 是不正确的。
我不知道你从这个 result.ViewName
得到的结果是什么,但它应该等于文本 "Error"
才能使你的测试通过。否则,您应该将 "Error"
更改为实际结果,将 result.ViewName
更改为预期结果。
Assert.AreEqual(result.ViewName, "Error");
记住:Assert.AreEqual(
预期结果、实际结果);
如果你还是一头雾水,请看下面我的示例代码,让你看得更清楚。
这是我的预期结果:
http://prntscr.com/8p0r03
这是我的实际结果: http://prntscr.com/8p0qnj