显示消息对话框的方法

时间:2014-03-28 10:17:46

标签: c# testing dependency-injection

我有一系列程序,它们会出于各种原因重复向用户显示消息。我最初的想法是一个基本的静态辅助方法:

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

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

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

我确定最好的方式是依赖注入,但这就是每次我想显示一条消息时都必须实例化一个新的无状态对象的问题。

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

Message.ShowMessage("hello");

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

2 个答案:

答案 0 :(得分: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策略。这就是我用于单元测试的内容。

答案 1 :(得分:0)

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