【发布时间】:2019-11-21 19:19:09
【问题描述】:
我想启动一个 WPF 应用程序并调用 ViewModel 上的方法来控制该应用程序以进行集成测试。比如:
[Test]
public void Test1()
var application = new MyApp();
application.InitializeComponent();
application.Run();
(好的,此时停止测试执行,大概将控制权传递给 WPF 应用程序。不知道如何处理这个问题。在单独的线程中启动或其他什么?)
然后我希望能够在 ViewModel 上获取和设置值,如下所示:
application.MyViewModel.SomeProperty = "A value!";
这里的目标是在不求助于 WinAppDriver、White、CodedUI 或类似的任何杂乱无章的东西的情况下以集成的方式测试 WPF 应用程序。想法?
【问题讨论】:
-
我确信这是可能的,但我感觉无论你推出什么解决方案都会像 CodedUI 一样复杂。考虑以下用例:如何在 StackPanel 中获取 TextBox 的值,该 StackPanel 位于 Dialog 中托管的 Grid 中?现在您将如何做到这一点,以使您的解决方案不会脆弱(例如,在不破坏测试的情况下删除网格)。
-
@Ilian:按照我阅读问题的方式,OP 正在寻求直接操作底层视图模型对象。 IE。他不想尝试与 UI 交互,而是想绕过 UI,只确保 从 视图模型到 UI 的绑定之类的东西正常工作。在这种情况下,我认为“工作”只是意味着“没有例外”。如果需要检查 UI 对象属性,则可以通过其他方式对其进行抽象。这方面的细节将是一个完整的“另一个问题”。 :)
-
@PeterDuniho 这很有道理:)
-
你们都提出了很好的问题。我们需要完全重写 ViewModel 和服务层以与完全不同的后端进行通信。诸如 CodedUI 之类的解决方案往往会导致缓慢、不稳定的测试,并且不会减少我们将要进行的测试数量。单元测试也无济于事。
标签: c# wpf multithreading integration-testing