Primary APIs:
AvaloniaHeadlessPlatformExtensions.UseHeadless(...)AvaloniaHeadlessPlatformOptionsAvaloniaHeadlessPlatform.ForceRenderTimerTick(...)HeadlessWindowExtensionsHeadlessUnitTestSessionAvaloniaTestApplicationAttributeAvaloniaTestIsolationAttributeAvaloniaTestIsolationLevelAvalonia.Headless.NUnit.AvaloniaTestAttributeAvalonia.Headless.XUnit.AvaloniaFactAttributeAvalonia.Headless.XUnit.AvaloniaTheoryAttributeImportant members:
AvaloniaHeadlessPlatformOptions.UseHeadlessDrawingAvaloniaHeadlessPlatformOptions.FrameBufferFormatTopLevel.CaptureRenderedFrame()TopLevel.GetLastRenderedFrame()TopLevel.KeyPress(...), KeyRelease(...), KeyTextInput(...)TopLevel.MouseDown(...), MouseMove(...), MouseUp(...), MouseWheel(...)TopLevel.DragDrop(...)HeadlessUnitTestSession.StartNew(...), GetOrStartForAssembly(...)HeadlessUnitTestSession.Dispatch(...)Reference source files:
src/Headless/Avalonia.Headless/AvaloniaHeadlessPlatform.cssrc/Headless/Avalonia.Headless/HeadlessWindowExtensions.cssrc/Headless/Avalonia.Headless/HeadlessUnitTestSession.cssrc/Headless/Avalonia.Headless/AvaloniaTestApplicationAttribute.cssrc/Headless/Avalonia.Headless/HeadlessUnitTestIsolationAttribute.cssrc/Headless/Avalonia.Headless.NUnit/AvaloniaTest.cssrc/Headless/Avalonia.Headless.XUnit/AvaloniaFact.cssrc/Headless/Avalonia.Headless.XUnit/AvaloniaTheoryAttribute.cstests/Avalonia.Headless.UnitTests/TestApplication.csHeadless test pipeline:
UseHeadless(...).HeadlessWindowExtensions methods.public static AppBuilder BuildAvaloniaApp() => AppBuilder.Configure<TestApp>()
.UseSkia()
.UseHeadless(new AvaloniaHeadlessPlatformOptions
{
UseHeadlessDrawing = false
});
using Avalonia.Headless;
[assembly: AvaloniaTestApplication(typeof(TestApp))]
[assembly: AvaloniaTestIsolation(AvaloniaTestIsolationLevel.PerTest)]
using Avalonia.Controls;
using Avalonia.Headless.XUnit;
public class UiTests
{
[AvaloniaFact]
public void Can_render_window_frame()
{
var window = new Window { Width = 400, Height = 300 };
window.Show();
var frame = window.CaptureRenderedFrame();
if (frame is null)
throw new Exception("Expected rendered frame.");
}
}
window.MouseMove(new Point(50, 20));
window.MouseDown(new Point(50, 20), Avalonia.Input.MouseButton.Left);
window.MouseUp(new Point(50, 20), Avalonia.Input.MouseButton.Left);
window.KeyTextInput("abc");
x:DataType) to match production AOT paths..UseSkia() with UseHeadlessDrawing = false.GetLastRenderedFrame() throws:
UseHeadlessDrawing = false.AvaloniaFact / AvaloniaTest / session Dispatch).AvaloniaTestIsolationLevel.PerTest for strict isolation.Default mode:
XAML-first references:
.axaml test views with compiled bindingsInitializeComponent() path in testsXAML-first usage example:
<UserControl xmlns="https://github.com/avaloniaui"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:vm="using:MyApp.ViewModels"
x:Class="MyApp.Views.TestView"
x:DataType="vm:TestViewModel">
<TextBlock Text="{CompiledBinding Status}" />
</UserControl>
Code-only alternative (on request):
var window = new Window
{
Content = new TextBlock { Text = "Smoke test" }
};
window.Show();