在单元测试期间使用不同的枚举值?

时间:2014-07-30 19:04:37

标签: unit-testing enums business-rules

我写了一个处理程序,它基本上收集了三条关于错误的信息:它来自哪个应用程序;异常的堆栈跟踪;和异常的错误消息。根据该信息,我使用业务规则,在数据库中为每个应用程序设置,以对每个错误进行分类。

对于我的单元测试,我需要能够控制应用程序的业务规则,以便我可以正确地预测类别。由于源应用程序参数是一个枚举,我将TestApp值添加到该枚举中并在我的所有内容中使用它。

现在我们要发布了,我的代码审查员正确地要我从枚举中删除TestApp。显然这会破坏我的单元测试编译。如果我将TestApp更改为真实的,现在我可以编译,但我的测试将主要失败,因为真实应用程序的业务规则是不同的(并且可能会更改)。

以下是我所说的简化示例:

void Main()
{
    var fooError = new MyError
    {
        Application = Application.TestApp1,
        ErrorMessage = "my error message here",
        ErrorTime = DateTime.Now,
        StackTrace = "stack trace here",
        User = "mike"
    };

    Console.WriteLine("That error is of category {0}.", BusinessLogicForErrors(fooError));
}

string BusinessLogicForErrors(MyError error)
{
    string errCat;
    if (error.Application == Application.RealApp)
        errCat = "Horrible";
    else
        errCat = "Not So Bad";

    return errCat;
}

enum Application 
{
    RealApp,
    TestApp1,
    TestApp2
}

class MyError 
{
   public Application Application; 
   public DateTime ErrorTime;
   public string ErrorMessage;
   public string StackTrace;
   public string User;
}

我想我可以删除Application枚举并使用字符串代替,我只是想以正确的理由来做。此外,这可能更符合集成测试而非单元测试,因此可能是错误(或者应该使用模拟)。

我该怎么做才能解决这个问题?我应该从一开始就做些什么才能避免呢?

0 个答案:

没有答案