单元测试c#中的静态Main()方法

时间:2015-05-13 20:05:24

标签: c# unit-testing vs-unit-testing-framework

我正在尝试使用visual studio单元测试框架为静态Main方法编写单元测试,这也是我的应用程序的入口点。我的方法如下。

public static void Main()
        {
            StructureMapBootstrapper.Register();
            SetupFilter<Applicant>();
        }

这会调用一个通用的SetupFilter方法

private static void SetupFilter<T>() where T : IDataFilterBase, new()
        {
            var filterName = typeof(T).Name;
            if ("StartReceiver".TryGetTrueOrFalseConfigValue(filterName))
            {
                ObjectFactory.Configure(x => x.For<IDataFilterBase>().Use<T>());
                var filter = new T();
                filter.StartReceiver();
                LogHelper.LogInfo(string.Format("Started {0} Filter Service", filterName));
            }
            else
            {
                LogHelper.LogInfo(string.Format("{0} Filter Service NOT started. StartReceiver flag is set to false", filterName));
            }
        }

我想到的第一件事是使用MOQ并验证SetupFilter方法至少被调用一次,但编译器抱怨该方法是静态的。 有关如何为此方法编写测试的任何想法?如何使用VS-unit测试框架进行设置,以及Assert需要什么?

1 个答案:

答案 0 :(得分:1)

在我看来,你必须对你的代码做一个小的重构:

public class MyClass
{
    public static void Main()   
    {
       (new MyClass()).run();
    }
    public void Run()
    {
        StructureMapBootstrapper.Register();
        SetupFilter<Applicant>();
    }
}

然后您可以测试常规方法而不是static