ตกลงหรือไม่ที่จะเพิ่มการยืนยันที่ถูกเลื่อนออกไปเช่นนี้ [.. ]
ไม่มันไม่ใช่ ทำไม? เพราะถ้าคุณเอาเหตุผลที่สองออกมาการทดสอบก็จะเปลี่ยนเป็นสีเขียวและคุณคิดว่ามันยังใช้งานได้ แต่ก็ไม่ได้ผลเพราะคอลเลกชันจะไม่ได้รับการแจกแจง หากคุณมีการยืนยันอิสระสองหรือมากกว่านั้นพวกเขาจะทำงานต่อไปแม้ว่าคุณจะปิดการใช้งานอย่างใดอย่างหนึ่ง
พิจารณาชุดค่าผสมนี้:
Assert.IsTrue(actualKittens.All(x => x.IsCute());
CollectionAssert.AreEquivalent(expectedKittens, actualKittens.ToList());
ตอนนี้แม้ว่าคุณจะปิดการใช้งานหรือลบหนึ่งในการยืนยันอื่น ๆ ที่จะยังคงทำงานของมัน นอกจากนี้หากคุณลืมที่จะเก็บรวบรวมคอลเลกชันที่เป็นรูปธรรมอาจใช้เวลานานกว่า แต่มันจะยังใช้งานได้ การทดสอบอิสระนั้นแข็งแกร่งและเชื่อถือได้มากขึ้น
นอกจากนี้ยังมีสองไม่มี ฉันไม่แน่ใจว่าเฟรมเวิร์กอื่นจัดการอย่างไร แต่ถ้าคุณใช้แพลตฟอร์มทดสอบ MS คุณจะไม่ทราบว่าการทดสอบใดล้มเหลว หากคุณคลิกสองครั้งที่การทดสอบที่ล้มเหลวมันจะแสดงCollectionAssert
ว่าล้มเหลว แต่ในความเป็นจริงมันซ้อนกันAssert
ที่ผิดพลาดและมันจะยากมากในการดีบัก นี่คือตัวอย่าง:
[TestMethod]
public void TestMethod()
{
var numbers = new[] { 1, 2, 3 }.Select(x =>
{
Assert.Fail("Wrong number.");
return x;
});
// This will fail and you won't be sure why.
CollectionAssert.AreEqual(new[] { 1, 2, 3 }, numbers.ToList());
}
ซึ่งหมายความว่าการทดสอบครั้งแรกนั้นไร้ประโยชน์จริง ๆ เพราะไม่ช่วยในการค้นหาข้อบกพร่อง คุณไม่ทราบว่ามันล้มเหลวเพราะหมายเลขไม่ถูกต้องหรือเพราะทั้งสองคอลเลกชันนั้นแตกต่างกัน
ทำไม? ดังนั้นฉันสามารถทำซ้ำได้เพียงครั้งเดียวแม้จะมีข้อความที่คาดว่าจะเกิดการรวบรวมที่เป็นรูปธรรม
ฉันสงสัยว่าทำไมคุณถึงสนใจ นี่คือการทดสอบหน่วย คุณไม่จำเป็นต้องปรับให้เหมาะสมทุกบิตและโดยปกติแล้วการทดสอบไม่จำเป็นต้องมีรายการนับล้านดังนั้นประสิทธิภาพจึงไม่ควรเป็นปัญหา
คุณจะต้องรักษาการทดสอบดังกล่าวดังนั้นทำไมคุณควรทำให้มันซับซ้อนกว่านั้นจึงจำเป็น? เขียนข้อความง่ายๆที่ใช้งานได้
sequence.WithSideEffect(item => Assert.IsCute(item))
จะทำให้มันสะอาดขึ้น