ฉันมีชุดทดสอบในชุดทดสอบที่มีลักษณะดังนี้:
[Fact]
public void VerifySomeStuff()
{
var stuffCollection = GetSomeStuff();
Assert.Equal(1, stuffCollection.Count());
}
การทดสอบนี้ได้ผลตามที่ฉันคาดหวัง แต่เมื่อฉันเรียกใช้ xUnit จะพิมพ์คำเตือน:
คำเตือน xUnit2013: อย่าใช้ Assert.Equal () เพื่อตรวจสอบขนาดคอลเลกชัน
อย่างไรก็ตามไม่มีทางเลือกอื่นที่แนะนำในคำเตือนและการค้นหาโดย Google จะพาฉันไปที่ซอร์สโค้ดใน xUnit สำหรับการทดสอบที่ยืนยันว่ามีการพิมพ์คำเตือนนี้
หากAssert.Equal()
ไม่ใช่วิธีที่ถูกต้องในการตรวจสอบความยาวของคอลเลคชันคืออะไร?
เพื่อชี้แจง: ฉันตระหนักดีว่าฉันสามารถ "หลอก" xUnit ไม่ให้ส่งเสียงเตือนนี้ได้โดยการแยกตัวแปรหรือใช้Assert.True(stuff.Count() == 1)
แทน หลังเป็นเพียงแฮ็คและก่อนหน้านี้รู้สึกเหมือนว่า xUnit พยายามหลีกเลี่ยงการทำซ้ำหลาย ๆ ครั้งIEnumerable<T>
นี่เป็นวิธีที่ผิดที่จะไป (เพราะฉันจะได้รับคำแนะนำเกี่ยวกับคอมไพเลอร์แยกต่างหากหากเป็นปัญหา) และ xUnit ตัวเองไม่ควรต้องประเมินอินพุตมากกว่าหนึ่งครั้ง (อันที่จริงมันอาจจะได้รับอินพุตเดียวกันโดยไม่คำนึงถึงการแยกตัวแปรเนื่องจากวิธีการเรียกใช้ฟังก์ชัน C #)
ดังนั้นฉันไม่เพียง แต่สนใจที่จะลบคำเตือนนั้นออกจากผลลัพธ์ของฉัน คำตอบสำหรับคำถามของฉันยังอธิบายว่าเหตุใดคำเตือนนั้นจึงรวมอยู่ในห้องสมุดตั้งแต่แรกและเหตุใดฉันจึงควรใช้วิธีใดจึงจะดีกว่า
stuffCollection.Count()
ในตัวแปรแยกต่างหากและส่งต่อไปยังผู้ยืนยันจะทำให้คุณมีข้อผิดพลาดเดียวกันหรือไม่?