如何重构测试应用程序?

4

我有一个测试应用程序,其中包含一个名为 TestSeq 的类和一个名为 Go() 的方法,它由以下代码块组成:

            _writer.WriteLine("Doing foo action...");
            var stopwatch = Stopwatch.StartNew();
            // foo - some work here
            stopwatch.Stop();
            _writer.WriteDone("Results of foo action.", stopwatch.Elapsed);

在“某些工作”中,我有不同对WCF客户端的调用(CRUD操作、过滤器等)。因此,大量的重复代码,显然需要进行一些重构。我考虑创建一个TestAction类,但我不知道如何将“某些工作”部分放入其中。对我来说,这似乎是一个相当简单的问题,但我不知道应该搜索什么关键词。因此,我很高兴看到只带有关键词(模式名称或其他内容)或链接的答案。
1个回答

5

我相信还有更多方法,但是就我的经验来看,你可以使用两种方式来编写这个样板代码。

方法1: 使用using语法来包装你感兴趣的代码

class MeasuredOperation : IDisposable
{
    Stopwatch stopwatch;
    string message;

    public MeasuredOperation(string message)
    {
        Console.WriteLine("Started {0}", message);
        stopwatch = Stopwatch.StartNew();
        this.message = message;
    }

    public void Dispose()
    {
        stopwatch.Stop();
        Console.WriteLine("Results of {0} Elapsed {1}", this.message, this.stopwatch.Elapsed);
    }
}

    static void Main(string[] args)
    {
        using (new MeasuredOperation("foo action"))
        {
            // Do your action
        }
    }

方法二: 创建一个新函数,将您的代码块作为委托传递

static void MeasuredAction(string message, Action action)
{
    Console.WriteLine("Started {0}", message);
    var stopwatch = Stopwatch.StartNew();
    action();
    stopwatch.Stop();
    Console.WriteLine("Results of {0} Elapsed {1}", message, stopwatch.Elapsed);
}

static void Main(string[] args)
{
    MeasureAction(delegate()
    {
        // do work
    });
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接