วิธีทดสอบรหัส async โดยใช้ MSTest


92

ฉันกำลังเขียนโค้ด async แบบธรรมดา ๆ เพียงแค่บันทึกไฟล์นอกเธรด

ฉันต้องการทดสอบโค้ดนี้โดยใช้กรอบการทดสอบหน่วย MSTest ใน Microsoft Visual Studio Team System 2008

ฉันต้องทำอย่างไร

ฉันต้องการบล็อกวิธีทดสอบอย่างง่าย ๆ จนกว่าเมธอดจะกลับมา ฉันพอจะนึกภาพออกได้บ้าง แต่ฉันรู้สึกทึ่งมากว่าไม่มีแนวทางปฏิบัติที่ดีที่สุดหรือชั้นเรียนผู้ช่วยเกี่ยวกับเรื่องนี้

ฉันเห็นมากสำหรับ Silverlight แต่ไม่มีอะไรทั่วไป


4
ซ้ำกัน? stackoverflow.com/questions/1174702/… (ฉันคิดว่าคำตอบที่ให้มาไม่เกี่ยวข้องโดยตรงกับกรอบการทดสอบใดที่ใช้)
Fredrik Mörk

1
ใช่มันเป็น - และคำตอบจะเหมือนกันที่ฉันคิด
Andras Zoltan

คำตอบ:


167

Visual Studio 2012 (ที่รู้จักกันก่อนหน้านี้เป็น "Visual Studio 11") การสนับสนุนการแนะนำสำหรับการทดสอบ async ดูเหมือนว่า:

[TestMethod]
public async Task FooTest()
{
   var result = await SomeAsyncOperation();
   Assert.IsTrue(someCondition);
}

ตามที่ระบุไว้ในความคิดเห็นที่ชนิดกลับเป็นสิ่งที่สำคัญ มันจะไม่ทำงานถ้าคุณประกาศวิธีการที่กลับมาTaskvoid


59
โปรดทราบว่าTaskประเภทการส่งคืนเป็นข้อบังคับ - voidจะไม่ทำงาน (อย่างน้อยก็ไม่ใช่ในการอัปเดต VS2013 4)
Ohad Schneider

3
(มันจะไม่ได้ผลเนื่องจาก voidไม่สามารถรอการเปลี่ยนวิธีการ async ได้)
Richard Szalay

1
@RichardSzalay: สามารถใช้งานได้ดูที่นี่ว่า NUnit ทำอย่างไร: stackoverflow.com/questions/15031681/…
Wim Coenen

-3

แทนที่จะเรียกเมธอด System.IO โดยตรงให้ลองใช้ไลบรารีSystemWrapperแทน จากนั้นในการทดสอบของคุณคุณสามารถล้อเลียนการโทรตามที่คุณต้องการส่งคืนสิ่งที่คุณต้องการกลับไปที่การทดสอบของคุณรวมถึงเงื่อนไขข้อผิดพลาดและตรวจสอบว่าตรรกะของคุณทำงานตามที่คาดไว้

หากคุณต้องการดูตัวอย่างโปรดดูที่บล็อกโพสต์นี้เพื่อแสดงวิธีใช้กับ RhinoMocks


3
ฉันไม่เห็นว่านี่เป็นคำตอบสำหรับคำถาม
SteveC
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.