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 el NUnit TestFixture
no tiene un método principal, no sé dónde ni cómo anotarlo.¿Cómo se ejecutan las pruebas unitarias en modo STAThread?
Respuesta
Para NUnit 2.2, 2.4 (Ver solución simple a continuación para 2.5):
añadir un archivo app.config al proyecto que contiene las pruebas unitarias e incluyen los siguientes:
<?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 roscado apartamento es STA con el siguiente código C#:
if (Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
{
throw new ThreadStateException("The current threads apartment state is not STA");
}
Pregunta simple, pero frustrante, respuesta inmediata de trabajo: algunos días me encanta SO. – Peter
Casi olvidando: Gracias hombre – Peter
Si alguna vez lo buscas de nuevo (y SO está fuera de servicio) esto es de la configuración de muestra proporcionada en WatiN. Me alegro de poder ayudar. :) –
Si está utilizando nunit 2.5+, puede utilizar la nueva clase en el RequiresSTAAttribute
[TestFixture, RequiresSTA]
o nivel de montaje.
[assembly:RequiresSTA]
No hay necesidad de archivo de configuración. comprobar: http://www.nunit.org/index.php?p=requiresSTA&r=2.5
Esto es lo único que funcionó para mí al intentar ejecutar pruebas utilizando el corrector de prueba de ReSharper 5.1 de Visual Studio 2010 SP1. –
¡Gracias, funcionó para mí! Mejor que la respuesta aceptada. –
También puede usar 'RequiresSTA' en métodos de prueba individuales, y el atributo BCL' STAThread' funciona como sinónimo de 'RequiresSTA'. –
En NUnit 2.6.1+ puede utilizar el /apartamento STA = mando de indicadores de línea:
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
...
NUnit 3.0
Migramos a NUnit 3.0 recientemente y los viejos atributos que habíamos estado usando 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 utilizando la siguiente:
Asamblea Nivel
[assembly: Apartment(ApartmentState.STA)]
Nivel Clase
[TestFixture]
[Apartment(ApartmentState.STA)]
Método Nivel
[Test]
[Apartment(ApartmentState.STA)]
Tratando de 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.
Esta es _la_ respuesta para NUnit 3.0+. No te olvides de incluir 'System.Threading'. – AutomatedChaos
- 1. Las pruebas unitarias no se ejecutan cuando NO está en el modo de depuración
- 2. ¿Cómo se ejecutan las pruebas de meteoritos?
- 3. ¿Inhabilitar Django South cuando se ejecutan pruebas unitarias?
- 4. En Python, ¿cómo se ejecutan programáticamente las pruebas unitarias almacenadas en una cadena?
- 5. ¿Cómo escribo las pruebas unitarias en PHP?
- 6. ¿Cómo se manejan las pruebas unitarias en F #?
- 7. ¿Cómo se organizan las pruebas unitarias en paquetes?
- 8. ¿Qué pruebas con las pruebas unitarias?
- 9. Cuándo usar las pruebas unitarias?
- 10. ¿Cómo se separan las pruebas unitarias de las pruebas de integración en Visual Studio?
- 11. ¿Cómo deberían documentarse las pruebas unitarias?
- 12. Cómo configurar las variables $ _SERVER [''] cuando se ejecutan las pruebas de phpunit a través de Jenkins
- 13. Maven - Agregar directorio a classpath mientras se ejecutan las pruebas
- 14. ¿Cómo deben las pruebas unitarias configurar fuentes de datos cuando no se ejecutan en un servidor de aplicaciones?
- 15. FileNotFoundException cuando se ejecutan las pruebas de NUnit de TeamCity
- 16. Pruebas unitarias en CakePHP?
- 17. ¿Cómo funciona el recolector de basura con las pruebas unitarias?
- 18. pruebas unitarias con las dependencias entre las pruebas
- 19. Pruebas unitarias: cómo hacerlo?
- 20. Pruebas unitarias: ¿codificación en las interfaces?
- 21. ¿Cómo deshabilitar las traducciones durante las pruebas unitarias en django?
- 22. Pruebas unitarias en C++
- 23. Error con el sur cuando se ejecutan pruebas unitarias usando la nariz
- 24. Pruebas unitarias ... cómo mejorarlo
- 25. Generando pruebas unitarias automáticamente
- 26. Pruebas de depuración que se ejecutan bajo NUnit
- 27. Pruebas unitarias en C++
- 28. ¿Cómo se ejecutan las pruebas de NUnit v2.4.8 con NAnt 0.86 beta?
- 29. ¿Cómo funcionan las pruebas unitarias en el iPhone?
- 30. ¿Deberían todas las pruebas unitarias ser exitosas?
Por curiosidad, ¿no será suficiente agregar el atributo [STATThread] sobre su TextFixture/TestMethod/TestClass? –
Solo funciona en Métodos, y no funcionó en configuraciones de dispositivos, métodos de prueba, ... Por supuesto que podría haber pasado por alto algo. Le invitamos a responder si encuentra alguna otra solución. – Peter