سؤال

ويتيح القول لدي عامل خلفية في فئة أداء الاستعلام ديسيبل في موضوع الخلفية.

وأريد أن اختبار هذه الفئة

لذلك أنا يسخر لي ديسيبل وإعادة بعض جمع حتى الآن على ما يرام، تأكد من عامل خلفيتي يسمى العمل افعل ومن أريد التأكد من أن النهاية حدث أيضا.

ولقد لاحظت أن تمرير الاختبار وتفشل عشوائيا (وأعتقد أنه لديها ما تفعله مع المواضيع)

وأي اقتراحات

هل كانت مفيدة؟

المحلول

قد يكون لديك حالة تعارض بين موضوع الخلفية ويؤكد / يتحقق.

وعلى سبيل المثال:

[Test]
public void TestWithRaceCondition()
{
    bool called = false;
    new Thread(() => called = true).Start();
    Assert.IsTrue(called);
}

ولا يعني بالضرورة نهاية الخيط قبل يؤكد، في بعض الأحيان وسوف، وأحيانا لا. هناك حل لهذه الحالة هو الانضمام إلى ترابط خلفية:

[Test]
public void TestWithoutRaceCondition()
{
    bool called = false;
    var thread = new Thread(() => called = true);
    thread.Start();
    thread.Join()
    Assert.IsTrue(called);
}

وطريقة واحدة للتحقق ما اذا كان شرط السباق لتأخير موضوع اختبار (دعوة Thread.Sleep لفترة طويلة قبل أن ASSERT) وإذا توقف الاختبار فشل هذا مؤشر جيد لحالة السباق.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top