كيفية تشغيل اختبارات الوحدة في وضع Stathread؟

StackOverflow https://stackoverflow.com/questions/2434067

  •  19-09-2019
  •  | 
  •  

سؤال

أرغب في اختبار تطبيق يستخدم الحافظة (WindowsForms) وأحتاج إلى الحافظة في اختبارات وحدتي أيضا. من أجل استخدامه، يجب تشغيله في وضع STA، ولكن منذ nunit TestFixture ليس لديك طريقة رئيسية، لا أعرف أين / كيفية التعليق عليه.

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

المحلول

ل Nunit 2.2، 2.4 (انظر الحل البسيط أدناه مقابل 2.5):

أضف ملف applconfig إلى المشروع الذي يحتوي على اختبارات وحدتك ويشمل ما يلي:

<?xml version="1.0" encoding="utf-8" ?>
<configuration>
    <configSections>
        <sectionGroup name="NUnit">
        <section name="TestRunner" type="System.Configuration.NameValueSectionHandler"/>
    </sectionGroup>
    </configSections>
    <NUnit>
        <TestRunner>
            <add key="ApartmentState" value="STA"/>
        </TestRunner>
    </NUnit>
</configuration>

يمكنك التحقق من أن خيوط الشقة هي STA مع رمز C # التالي:

if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
{
   throw new ThreadStateException("The current threads apartment state is not STA");
}

نصائح أخرى

إذا كنت تستخدم NUNIT 2.5+، يمكنك استخدام الجديد RequiresSTAAttribute فى الفصل

[TestFixture, RequiresSTA]

أو مستوى التجميع.

[assembly:RequiresSTA]

لا حاجة لملف التكوين. التحقق من:http://www.nunit.org/index.php؟p=Requiressta&r=2.5.

nunit 3.0.

هاجرنا إلى NUNIT 3.0 مؤخرا والسمات القديمة التي استخدمناها لم تعد تعمل. تستخدم اختباراتنا مزيجا من [STAThread] و [RequiresSTA] كما هو الحال في إجابة mas_oz2k1 أعلاه. كان Stathread هو إعطاء أخطاء في الترجمة لأنها لم تعد وجدت ومحاماة كانت تعطي تحذيرات لأنه تم إهمالها.

يبدو أن الصفقة الجديدة تستخدم ما يلي:

مستوى التجميع

[assembly: Apartment(ApartmentState.STA)]

مستوى الطبقة

[TestFixture]
[Apartment(ApartmentState.STA)]

مستوى الطريقة

[Test]
[Apartment(ApartmentState.STA)]

أحاول إيجاد هذه المعلومات، أخذني إلى أسفل طريق مظلم حيث كان الناس يعدلون رمز الاختبار الخاص بهم باستخدام فئة يسمى crossthreadtestrunner. كان هذا هو الحل في عام 2004 أفترض، قبل إنشاء فئات السمة هذه.

في Nunit 2.6.1+ يمكنك استخدام / شقة = ستا علم سطر الأوامر:

NUnit-Console version 2.6.3.13283
Copyright (C) 2002-2012 Charlie Poole.
Copyright (C) 2002-2004 James W. Newkirk, Michael C. Two, Alexei A. Vorontsov.
Copyright (C) 2000-2002 Philip Craig.
All Rights Reserved.

Runtime Environment -
   OS Version: Microsoft Windows NT 6.1.7601 Service Pack 1
  CLR Version: 4.0.30319.18052 ( Net 4.5 )


NUNIT-CONSOLE [inputfiles] [options]

Runs a set of NUnit tests from the console.

You may specify one or more assemblies or a single
project file of type .nunit.

Options:
...
/apartment=X            Apartment for running tests: MTA (Default), STA
...
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top