unit-testing - 测试 Prism DialogService

标签 unit-testing prism

我有一个用于确认的 Prism 对话框服务(对话框中的是和否按钮),我以这种方式使用它;

bool confirmed = false;

DialogParameters p = new DialogParameters
{
    { "title", title },
    { "message", message }
};
dialogService.ShowDialog("ConfirmationDialog", p, r => { confirmed = r.Result == ButtonResult.OK; });

if (!confirmed)
{
    return;
}

// code I am not able to test

它的工作原理就像一个魅力,但我无法测试返回后的代码,因为在执行测试时“confirmed”总是 false,所以它总是返回并且“return”之后的代码永远不会执行.

我认为测试它的最佳方法应该是以某种方式在“r”中注入(inject) IDialogResult 值,这样我就可以强制我总是在测试 r.Result == ButtonResult.OK。但是...我该怎么做呢?

也许我的确认对话框方法不好,或者我可能遗漏了一些东西,所以任何建议对我来说都会有很大的帮助。

注意:我使用 Fake It Easy 进行测试,但这不是任何其他测试框架中解释的解决方案的问题。

更新:这是测试中dialogService的实现:

dialogService = A.Fake<IDialogService>();

然后将其注入(inject)到ViewModel中:

var viewModel = new MyViewModel(dialogService);

谢谢

最佳答案

我不知道 Fake It Easy,但是有了 MOQ 和 NUnit,我会写这样的东西:

// Arrange
var dialogServiceMock = new Mock<IDialogService>();
dialogServiceMock.Setup( x => x.ShowDialog( It.IsAny<string>(), It.IsAny<IDialogParameters>(), It.IsAny<Action<IDialogResult>>() ) )
                 .Callback<string, IDialogParameters, Action<IDialogResult>>( ( n, p, c ) => c( new DialogResult( ButtonResult.OK ) ) );

// Act
var receivedResult = ButtonResult.None;
dialogServiceMock.Object.ShowDialog( "my name", new DialogParameters( "my parameters" ), r => receivedResult = r.Result );

// Assert
Assert.That( receivedResult, Is.EqualTo( ButtonResult.OK ) );

关键点是回调的设置。没有它,模拟不知道如何处理 Action<IDialogResult>参数,即使它想调用它,它也不知道要使用的参数。

编辑:Fake It Easy 相当于 MOQ 的 Callback似乎是Invokes (找到here)。

关于unit-testing - 测试 Prism DialogService,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64770095/

相关文章:

eclipse 中的 Javascript 单元测试

silverlight - 在文本框中输入百分比将值乘以100

c# - Xamarin.Forms 的属性注入(inject)(setter 注入(inject)) Prism

unit-testing - 使用 Jest 和 Enzyme 测试 switch 语句

c# - 如何设置我的对话框的大小取决于主窗口(明智的 MVVM)

c# - WPF 窗口边框与功能区控件表现得很奇怪

c# - Prism - EventAggregator.GetEvent<>.Subscribe() - 使用泛型和约束

c# - 如何对使用 Entity Framework 的存储库模式进行单元测试?

postgresql - 测试后 docker-compose 退出 depends_on 服务

unit-testing - karma 报错-未知提供者: $$asyncCallbackProvider