AntonioGanci

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

giovedì 19 agosto 2010

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.

posted @ lunedì 1 gennaio 0001 00:00 | Feedback (2) | Filed Under [ Tips Extreme Programming ]

Powered by:
Powered By Subtext Powered By ASP.NET