Tôi hy vọng câu hỏi này đưa ra một số câu trả lời thú vị bởi vì nó đã khiến tôi chán nản trong một thời gian.
Có giá trị thực nào trong đơn vị kiểm tra bộ điều khiển trong ASP.NET MVC không?
Điều tôi muốn nói là, hầu hết thời gian, (và tôi không phải là thiên tài), các phương thức điều khiển của tôi, ngay cả ở những thứ phức tạp nhất của chúng như thế này:
public ActionResult Create(MyModel model)
{
// start error list
var errors = new List<string>();
// check model state based on data annotations
if(ModelState.IsValid)
{
// call a service method
if(this._myService.CreateNew(model, Request.UserHostAddress, ref errors))
{
// all is well, data is saved,
// so tell the user they are brilliant
return View("_Success");
}
}
// add errors to model state
errors.ForEach(e => ModelState.AddModelError("", e));
// return view
return View(model);
}
Hầu hết các công việc nặng được thực hiện bởi đường ống dẫn MVC hoặc thư viện dịch vụ của tôi.
Vì vậy, có lẽ câu hỏi để hỏi có thể là:
- giá trị của đơn vị thử nghiệm phương pháp này là gì?
- nó sẽ không phá vỡ
Request.UserHostAddress
vàModelState
với một NullReferenceException? Tôi có nên cố gắng để chế nhạo những? - nếu tôi khúc xạ phương pháp này thành một "người trợ giúp" có thể sử dụng lại (mà tôi có lẽ nên làm, xem xét tôi đã làm bao nhiêu lần!), sẽ kiểm tra xem có đáng không khi tất cả những gì tôi thực sự kiểm tra chủ yếu là "đường ống", Có lẽ, đã được Microsoft thử nghiệm trong vòng một inch của cuộc sống?
Tôi nghĩ rằng quan điểm của tôi thực sự là, làm những điều sau đây dường như hoàn toàn vô nghĩa và sai lầm
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
Rõ ràng là tôi đang trở nên mù quáng với ví dụ vô nghĩa quá mức này, nhưng có ai có bất kỳ sự khôn ngoan nào để thêm vào đây không?
Mong chờ nó ... Cảm ơn.