【问题标题】:Method of displaying message dialogs显示消息对话框的方法
【发布时间】:2014-03-28 10:17:46
【问题描述】:

我有一个程序集合,由于各种原因反复向用户显示消息。我最初的想法是一个基本的静态辅助方法:

public class Message
{        
    public static void ShowMessage(...)
    {
        ...

该方法本身可以做各种事情(即它不仅仅是MessageBox.Show() 的包装器)。

显然,这会给测试带来问题。所以想到的下一个解决方案是使用单例模式。

我确信最简洁的方法是依赖注入,但这会带来每次我想显示消息时都必须实例化一个新的无状态对象的问题。

所以我的目标是创建一个允许单个调用公共类的结构。

Message.ShowMessage("hello");

有没有办法在保持可测试性的同时实现这一目标?

【问题讨论】:

  • but that presents the problem of having to instantiate a new stateless object each time I want to display a message - 这根本不是真的,这完全取决于您在容器中注册对象时指定的生命周期范围。

标签: c# testing dependency-injection


【解决方案1】:

我的方法是使用策略模式(根据项目的大小,这可能有点矫枉过正)。

interface IMessageShowingStrategy 
{
    void ShowMessage(...)
}

class RealMessageShowingStrategy : IMessageShowingStrategy 
{
    void ShowMessage(...) 
    {
        // Real code
    }
}

class TestingMessageShowingStrategy : IMessageShowingStrategy
{
    void ShowMessage(...)
    {
        // Code used for testing
    }
}

class Message 
{
    IMessageShowingStrategy messageStrategy;

    void ShowMessage(...)
    {
        this.messageStrategy.ShowMessage(...);
    }

}

然后您可以选择使用哪种策略。对于测试,您可以使用 TestingMessageShowingStrategy 的实例(可能在应用程序使用 -debug 开关或其他东西启动时),否则使用 Real 策略。这是我一直用于单元测试的。

【讨论】:

    【解决方案2】:

    您可以通过简单地扩展表单类并根据需要创建方法来实现这一点。

    【讨论】:

      猜你喜欢
      • 2019-09-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-10-19
      • 2017-08-01
      相关资源
      最近更新 更多