【问题标题】:Unit testing wpf (Disable message boxes)单元测试 wpf(禁用消息框)
【发布时间】:2018-04-12 06:14:56
【问题描述】:

我正在为我的代码编写单元测试。并使用“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”来禁用消息框。还有其他解决方案吗?

【问题讨论】:

    标签: c# wpf unit-testing


    【解决方案1】:

    是的。

    创建显示消息的界面

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

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

    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");     
    }
    

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

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

    【讨论】:

      猜你喜欢
      • 2014-03-31
      • 2011-12-01
      • 2013-09-10
      • 2011-09-21
      • 1970-01-01
      • 2018-12-17
      • 2011-06-30
      • 1970-01-01
      • 2015-02-18
      相关资源
      最近更新 更多