visual unitarias unit test studio pruebas mvc con c# nunit sta

c# - test - ¿Cómo ejecutar las pruebas unitarias en el modo STAThread?



testing in c# visual studio (4)

En NUnit 2.6.1+ puede usar el indicador de línea de comando / apartment = STA :

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

Me gustaría probar una aplicación que usa el Portapapeles (WindowsForms) y también necesito el Portapapeles en las pruebas de mi unidad. Para usarlo, debe ejecutarse en modo STA, pero dado que NUnit TestFixture no tiene un método principal, no sé dónde ni cómo anotarlo.


Para NUnit 2.2, 2.4 (Vea la solución simple a continuación para 2.5):

Agregue un archivo app.config al proyecto que contiene las pruebas de su unidad e incluya lo siguiente:

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

Puede verificar que el enhebrado del apartamento sea STA con el siguiente código C #:

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


Si usa nunit 2.5+, puede usar el nuevo The RequiresSTAAttribute en la clase

[TestFixture, RequiresSTA]

o nivel de ensamblaje.

[assembly:RequiresSTA]

Sin necesidad de archivo de configuración. cheque: http://www.nunit.org/index.php?p=requiresSTA&r=2.5


NUnit 3.0

Migramos a NUnit 3.0 recientemente y los antiguos atributos que habíamos estado utilizando ya no funcionaban. Nuestras pruebas usaron una mezcla de [STAThread] y [RequiresSTA] como en la respuesta de mas_oz2k1 anterior. STAThread estaba dando errores de compilación ya que ya no se encontraba y RequiresSTA estaba dando advertencias porque ha quedado obsoleto.

El New Deal parece estar usando lo siguiente:

Nivel de ensamblaje

[assembly: Apartment(ApartmentState.STA)]

Nivel de clase

[TestFixture] [Apartment(ApartmentState.STA)]

Nivel de método

[Test] [Apartment(ApartmentState.STA)]

Intentar encontrar esta información me llevó por un camino oscuro donde la gente estaba modificando su código de prueba usando una clase llamada CrossThreadTestRunner. Esta fue la solución en 2004, supongo, antes de que se crearan estas clases de atributos.