2016-05-18 9 views
1

Ich habe a new project gestartet. Es ist eine C# -Klassenbibliothek und wird mit einer Reihe von Windows Form Klassen ausgeliefert, die der Benutzer verwenden und erweitern kann.C# -Tests mit Windows Forms fehlgeschlagen unter Mono/Travis

Ich schrieb und lief some unit tests auf Windows mit NUnit. Keiner meiner Tests geht so weit, form.Show() zu nennen. Die Tests bestehen alle mit TestDriven.NET unter Windows.

Wenn Travis meine Tests unter einem Docker Container läuft unter Linux, erhalte ich eine Ausnahme-Stack:

System.TypeInitializationException : The type initializer for 'System.Windows.Forms.WindowsFormsSynchronizationContext' threw an exception. ----> System.TypeInitializationException : The type initializer for 'System.Windows.Forms.XplatUI' threw an exception. ----> System.ArgumentNullException : Could not open display (X-Server required. Check your DISPLAY environment variable) Parameter name: Display at System.Windows.Forms.Control..ctor() <0x40965cf0 + 0x0005e> in <filename unknown>:0 at System.Windows.Forms.ScrollableControl..ctor() <0x409656f0 + 0x00017> in <filename unknown>:0 at System.Windows.Forms.ContainerControl..ctor() <0x40965520 + 0x0002d> in <filename unknown>:0 at System.Windows.Forms.Form..ctor() <0x40964bd0 + 0x000ef> in <filename unknown>:0 at Chrysalis.Core.Forms.ChrysalisForm..ctor() <0x40961790 + 0x00017> in <filename unknown>:0 at Chrysalis.Core.UnitTests.Forms.ChrysalisFormTests+TestChrysalisForm..ctor() <0x40961760 + 0x00014> in <filename unknown>:0 at (wrapper remoting-invoke-with-check) Chrysalis.Core.UnitTests.Forms.ChrysalisFormTests+TestChrysalisForm:.ctor() at Chrysalis.Core.UnitTests.Forms.ChrysalisFormTests.CancelButtonMovesWhenResizeEventFires() <0x409614f0 + 0x0003e> in <filename unknown>:0 at (wrapper managed-to-native) System.Reflection.MonoMethod:InternalInvoke (System.Reflection.MonoMethod,object,object[],System.Exception&) at System.Reflection.MonoMethod.Invoke (System.Object obj, BindingFlags invokeAttr, System.Reflection.Binder binder, System.Object[] parameters, System.Globalization.CultureInfo culture) <0x4090c360 + 0x000b7> in <filename unknown>:0 --TypeInitializationException at System.Windows.Forms.Theme.get_MenuAccessKeysUnderlined() <0x4096bcb0 + 0x00010> in <filename unknown>:0 at System.Windows.Forms.SystemInformation.get_MenuAccessKeysUnderlined() <0x40967210 + 0x0001c> in <filename unknown>:0 at System.Windows.Forms.Control..ctor() <0x40965cf0 + 0x00274> in <filename unknown>:0 at (wrapper remoting-invoke-with-check) System.Windows.Forms.Control:.ctor() at System.Windows.Forms.WindowsFormsSynchronizationContext..cctor() <0x40967100 + 0x00031> in <filename unknown>:0 --ArgumentNullException at System.Windows.Forms.XplatUIX11.SetDisplay (IntPtr display_handle) <0x4096e400 + 0x00ec7> in <filename unknown>:0 at System.Windows.Forms.XplatUIX11..ctor() <0x4096c210 + 0x00231> in <filename unknown>:0 at System.Windows.Forms.XplatUIX11.GetInstance() <0x4096c000 + 0x00081> in <filename unknown>:0 at System.Windows.Forms.XplatUI..cctor() <0x4096bd20 + 0x00170> in <filename unknown>:0

Der Build-Knoten offensichtlich nicht über eine Anzeige, weil sie ohne Kopf ist.

Gibt es eine Möglichkeit, meine Tests in dieser Umgebung auszuführen?

Antwort

1

Ich übersetzte dies an GitHub (Travis-CI Repo) und bekam eine Antwort von Alexander Köplinger.

Travis unterstützt die Verwendung von xvfb als GUI-Back-End. Ich brauchte nur diese zu meinen .travis.yml Datei hinzufügen:

before_script: 
    - "export DISPLAY=:99.0" 
    - "sh -e /etc/init.d/xvfb start" 
    - sleep 3 # give xvfb some time to start 

Die Tests dann übergeben.