如何在 FlaUI/WPF Window 中注入模拟?
How to Inject Mocks in FlaUI/WPF Window?
在我的 WPF 应用程序中,我有一个 MainWindow.xaml
和一个相关的 MainWindow.xaml.cs
。后者有一个 属性 DatabaseAccessor
访问数据库:
public partial class MainWindow : System.Windows.Window
{
public IDatabaseAccessor DatabaseAccessor { get; set; }
public MainWindow()
{
InitializeComponent();
DatabaseAccessor = new RealDatabaseAccessor();
}
// [...]
}
现在我正在使用 FlaUI 编写测试。在我的测试中,我正在写类似
using FlaUI.UIA3;
using Moq;
var app = FlaUI.Core.Application.Launch("myapp.exe");
using (var automation = new UIA3Automation())
{
FlaUI.Core.AutomationElements.Window window = app.GetMainWindow(automation);
//// I am looking for a way to do something like this (but no such API exists):
// MainWindow myWindow = (MainWindow) window.RealWindow;
// myWindow.DatabaseAccessor = new Mock<IDatabaseAccessor>().Object;
}
对于我的测试,我不想与真实数据库通信而是模拟它。
如何将模拟的 DatabaseAccessor
注入到使用 FlatUI 打开的 Window 中(请参阅我最后一个片段中的注释代码)?或者换句话说:如何访问给定 FlaUI.Core.AutomationElements.Window
的 System.Windows.Window
?
如果这不可能,您将如何处理这样的问题?
你需要重新考虑你在这里做什么。
UI 自动化 测试不应该模拟依赖项。它在单独的进程中启动您的应用程序,并使用屏幕上显示的实际元素与其交互。
如果您想测试代码中的特定组件,您应该针对该组件编写单元测试。然后您可以模拟任何外部依赖项。
在我的 WPF 应用程序中,我有一个 MainWindow.xaml
和一个相关的 MainWindow.xaml.cs
。后者有一个 属性 DatabaseAccessor
访问数据库:
public partial class MainWindow : System.Windows.Window
{
public IDatabaseAccessor DatabaseAccessor { get; set; }
public MainWindow()
{
InitializeComponent();
DatabaseAccessor = new RealDatabaseAccessor();
}
// [...]
}
现在我正在使用 FlaUI 编写测试。在我的测试中,我正在写类似
using FlaUI.UIA3;
using Moq;
var app = FlaUI.Core.Application.Launch("myapp.exe");
using (var automation = new UIA3Automation())
{
FlaUI.Core.AutomationElements.Window window = app.GetMainWindow(automation);
//// I am looking for a way to do something like this (but no such API exists):
// MainWindow myWindow = (MainWindow) window.RealWindow;
// myWindow.DatabaseAccessor = new Mock<IDatabaseAccessor>().Object;
}
对于我的测试,我不想与真实数据库通信而是模拟它。
如何将模拟的 DatabaseAccessor
注入到使用 FlatUI 打开的 Window 中(请参阅我最后一个片段中的注释代码)?或者换句话说:如何访问给定 FlaUI.Core.AutomationElements.Window
的 System.Windows.Window
?
如果这不可能,您将如何处理这样的问题?
你需要重新考虑你在这里做什么。
UI 自动化 测试不应该模拟依赖项。它在单独的进程中启动您的应用程序,并使用屏幕上显示的实际元素与其交互。
如果您想测试代码中的特定组件,您应该针对该组件编写单元测试。然后您可以模拟任何外部依赖项。