gpt4 book ai didi

c# - 单元测试 wpf(禁用消息框)

转载 作者:太空宇宙 更新时间:2023-11-03 19:43:15 24 4
gpt4 key购买 nike

我正在为我的代码编写单元测试。并使用“Microsoft.VisualStudio.TestTools”。我不想在为包含消息框的函数运行“单元测试”时弹出消息。我可以通过使用以下代码来做到这一点,

 public static class UnitTestDetector
{
static UnitTestDetector()
{
string testAssemblyName = "Microsoft.VisualStudio.QualityTools.UnitTestFramework";
UnitTestDetector.IsInUnitTest = AppDomain.CurrentDomain.GetAssemblies()
.Any(a => a.FullName.StartsWith(testAssemblyName));
}

public static bool IsInUnitTest { get; private set; }
}

但对于此解决方案,我必须在实际功能中使用“IsInUnitTest”来禁用消息框。还有其他解决办法吗?

最佳答案

是的。

创建显示消息的界面

public interface IDisplay
{
void ShowMessage(string message);
}

例如通过构造函数将接口(interface)传递给您正在测试的类

public class ViewModel
{
private readonly IDisplay _display;

public ViewModel(IDisplay display)
{
_display = display;
}

public void DoSomething()
{
// do something
_display.ShowMessage("result of do something");
}
}

然后在测试中你将通过测试的实现

public class FakeDisplay : IDisplay
{
public string LastDisplayedMessage => _lastDisplayedMessage;

public void ShowMessage(string message)
{
_lastDisplayedMessage = message;
}
}

[Test]
public void WhenDoSomething_ShouldShowMessage()
{
var fakeDisplay = new FakeDisplay();
var viewmodel = new ViewModel(fakeDisplay);

viewmodel.DoSomething();

fakeDisplay.LastDisplayedMessage.Should().Be("result of do something");
}

在实际生产代码中,您将实现显示消息并将其传递给 View 模型的接口(interface)。

public class Display : IDisplay
{
public void ShowMessage(string message)
{
MessageBox.Show(message);
}
}

关于c# - 单元测试 wpf(禁用消息框),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49789228/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com