ฉันหวังว่าคำถามนี้จะให้คำตอบที่น่าสนใจเพราะเป็นคำถามที่ทำให้ฉันอึดใจ
มีค่าจริงในการทดสอบหน่วยควบคุมใน ASP.NET MVC หรือไม่?
สิ่งที่ฉันหมายถึงโดยส่วนใหญ่แล้ว (และฉันไม่มีอัจฉริยะ) วิธีการควบคุมของฉันคือแม้สิ่งที่ซับซ้อนที่สุดของพวกเขาเช่นนี้:
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);
}
การยกของหนักส่วนใหญ่ทำได้โดยไปป์ไลน์ MVC หรือไลบรารีบริการของฉัน
ดังนั้นคำถามที่อาจถามคือ:
- มูลค่าของการทดสอบหน่วยวิธีนี้จะเป็นอย่างไร
- มันจะไม่ทำลายบน
Request.UserHostAddress
และModelState
มี NullReferenceException หรือไม่? ฉันควรลองล้อเลียนสิ่งเหล่านี้หรือไม่ - ถ้าฉันหักเหวิธีนี้เป็น "ตัวช่วย" ที่สามารถใช้ซ้ำได้ (ซึ่งฉันอาจจะต้องพิจารณากี่ครั้งที่ฉันทำมัน!) จะทำการทดสอบที่คุ้มค่าเมื่อทุกอย่างที่ฉันกำลังทดสอบจริงๆคือ "ขั้นตอน" ซึ่งส่วนใหญ่ สันนิษฐานได้รับการทดสอบเพื่อภายในนิ้วของชีวิตโดย Microsoft?
ผมคิดว่าจุดของฉันจริงๆจะทำต่อไปนี้ดูเหมือนไม่มีจุดหมายอย่างเต็มที่และไม่ถูกต้อง
[TestMethod]
public void Test_Home_Index()
{
var controller = new HomeController();
var expected = "Index";
var actual = ((ViewResult)controller.Index()).ViewName;
Assert.AreEqual(expected, actual);
}
เห็นได้ชัดว่าฉันกำลังป้านกับตัวอย่างที่ไม่มีจุดหมายเกินจริงนี้ แต่ไม่มีใครมีภูมิปัญญาที่จะเพิ่มที่นี่?
หวังว่าจะได้ ... ขอบคุณ