52 votes

Comment exécuter les tests unitaires en mode STAThread ?

Je voudrais tester une application qui utilise le presse-papiers (WindowsForms) et j'ai besoin du presse-papiers dans mes Unittests également. Pour l'utiliser, il faudrait qu'elle tourne en mode STA, mais comme le Testfixture NUnit n'a pas de méthode main, je ne sais pas où/comment l'annoter...

Merci !

100voto

mas_oz2k1 Points 1304

Si vous utilisez nunit 2.5+, vous pouvez utiliser le nouvel outil The RequiresSTAAttribute en classe

[TestFixture, RequiresSTA]

ou au niveau de l'assemblage.

[assembly:RequiresSTA]

Pas besoin de fichier de configuration. Vérifiez : http://www.nunit.org/index.php?p=requiresSTA&r=2.5

33voto

Bernhard Hofmann Points 4741

Pour NUnit 2.2, 2.4 (Voir la solution simple ci-dessous pour 2.5) :

Ajoutez un fichier app.config au projet contenant vos tests unitaires et incluez les éléments suivants :

<?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>

Vous pouvez vérifier que le threading de l'appartement est STA avec le code C# suivant :

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

4voto

Denis Points 2122

Dans NUnit 2.6.1+, vous pouvez utiliser la fonction /appartement=STA en ligne de commande :

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:
/fixture=STR            Test fixture or namespace to be loaded (Deprecated) (Short format: /load=STR)
/run=STR                Name of the test case(s), fixture(s) or namespace(s) to run
/runlist=STR            Name of a file containing a list of the tests to run, one per line
/config=STR             Project configuration (e.g.: Debug) to load
/result=STR             Name of XML result file (Default: TestResult.xml) (Short     format: /xml=STR)
/xmlConsole             Display XML to the console (Deprecated)
/noresult               Suppress XML result output (Short format: /noxml)
/output=STR             File to receive test output (Short format: /out=STR)
/err=STR                File to receive test error output
/work=STR               Work directory for output files
/labels                 Label each test in stdOut
/trace=X                Set internal trace level: Off, Error, Warning, Info, Verbose
/include=STR            List of categories to include
/exclude=STR            List of categories to exclude
/framework=STR          Framework version to be used for tests
/process=X              Process model for tests: Single, Separate, Multiple
/domain=X               AppDomain Usage for tests: None, Single, Multiple
/apartment=X            Apartment for running tests: MTA (Default), STA
/noshadow               Disable shadow copy when running in separate domain
/nothread               Disable use of a separate thread for tests
/basepath=STR           Base path to be used when loading the assemblies
/privatebinpath=STR     Additional directories to be probed when loading assemblies, separated by semicolons
/timeout=X              Set timeout for each test case in milliseconds
/wait                   Wait for input before closing console window
/nologo                 Do not display the logo
/nodots                 Do not display progress
/stoponerror            Stop after the first test failure or error
/cleanup                Erase any leftover cache files and exit
/help                   Display help (Short format: /?)

Options that take values may use an equal sign, a colon
or a space to separate the option from its value.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X