AntonioGanci

Il blog di Antonio Ganci
posts - 201, comments - 420, trackbacks - 31

Scrivere Acceptance Test per una applicazione Wpf

Gli acceptance test servono a verificare che una user story sia stata realizzata correttamente, quindi sono test definiti insieme al cliente o addirittura scritti dal cliente.

L'applicazione che stiamo scrivendo utilizza wpf, quindi la nostra necessità è quella di poter aprire finestre, cliccare sui pulsanti, ecc. all'interno di un test automatico.

Esistono approcci alternativi a quello che propongo in questo post, come ad esempio le TestApi, le quali utilizzano le automation api mentre per l'input del mouse e della tastiera utilizzano l'API SendInput. Le TestApi fanno molto di più di quello che a noi serve e quindi ho cercato un approccio più adatto al nostro caso.

Per prima cosa creiamo un progetto di Test che referenzia l'assembly con la finestra sotto test e scriviamo il seguente codice:

[TestFixture]
public class MainWindowTest
{
  [Test]  
  public void ShowTheMainWindow()
  {
    var window = new MainWindow();
    window.Show();
  }
}

Se proviamo ad eseguirlo ottienamo il seguente errore:

System.InvalidOperationException : The calling thread must be STA, because many UI components require this.

Il motivo dell'errore è che il default apartment state è MTA, normalmente lo si imposta come attributo del metodo Main, purtroppo in questo caso il main si trova nel test runner.

Per risolvere il problema dobbiamo aggiungere al progetto l'Application Configuration File (App.config) ed inserire la seguente configurazione:

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

Se proviamo a lanciare il test ora passa senza problemi; come test runner uso quello di Resharper per cui non so se con altri test runner la soluzione proposta funzioni correttamente.

Vedremo una tecnica per mandare gli eventi ai controlli nel prossimo post.

Print | posted on giovedì 19 agosto 2010 13:55 | Filed Under [ Tips Extreme Programming ]

Feedback

Gravatar

# re: Scrivere Acceptance Test per una applicazione Wpf

x Jacopo:
Interessante il post che avevi scritto, ho visto che hai usato FitNesse, magari lo provo sul mio progetto per capire se la leggibilità migliora.

Si possono testare alcuni comportamenti senza Show, ma ci sono eventi che se il controllo non è visibile non vengono generati (tipo checked di una check box).
Qui uso Wpf che per alcuni versi è simile a WinForm per altri è molto diverso. Gli esempi arriveranno a breve :-).
23/08/2010 14:46 | Antonio Ganci
Gravatar

# re: Scrivere Acceptance Test per una applicazione Wpf

La definizione di IoC che linki (quella in italiano su wikipedia) é errata.192.168.0.1
15/03/2015 13:37 | errata
Comments have been closed on this topic.

Powered by:
Powered By Subtext Powered By ASP.NET