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

C# c中静态Main()方法的单元测试#,c#,unit-testing,vs-unit-testing-framework,C#,Unit Testing,Vs Unit Testing Framework,我正在尝试使用VisualStudio单元测试框架为静态Main方法编写单元测试,这也是我的应用程序的入口点。我的方法如下 public static void Main() { StructureMapBootstrapper.Register(); SetupFilter<Applicant>(); } publicstaticvoidmain() { StructureMapBootstrappe

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

public static void Main()
        {
            StructureMapBootstrapper.Register();
            SetupFilter<Applicant>();
        }
publicstaticvoidmain()
{
StructureMapBootstrapper.Register();
SetupFilter();
}
这将调用一个通用的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));
            }
        }
private static void SetupFilter(),其中T:IDataFilterBase,new()
{
var filterName=typeof(T).Name;
if(“StartReceiver.TryGetTrueOrFalseConfigValue(filterName))
{
Configure(x=>x.For().Use());
var filter=newt();
filter.StartReceiver();
LogHelper.LogInfo(string.Format(“启动{0}筛选服务”,filterName));
}
其他的
{
LogHelper.LogInfo(string.Format(“{0}筛选器服务未启动。StartReceiver标志设置为false”,filterName));
}
}
我想到的第一件事是使用MOQ并验证SetupFilter方法至少被调用过一次,但编译器抱怨该方法是静态的。
你知道如何为这种方法编写测试吗?如何使用VS单元测试框架进行设置?我需要声明什么?

我认为您必须对代码进行一次小的重构:

public class MyClass
{
    public static void Main()   
    {
       (new MyClass()).run();
    }
    public void Run()
    {
        StructureMapBootstrapper.Register();
        SetupFilter<Applicant>();
    }
}
公共类MyClass
{
公共静态void Main()
{
(新建MyClass()).run();
}
公开募捐
{
StructureMapBootstrapper.Register();
SetupFilter();
}
}

然后您可以测试普通方法而不是静态方法,您正在尝试单元测试您的IoC容器?那么字符串上那个疯狂的扩展方法是干什么的?你打算如何对私有方法进行单元测试?我想你不应该对Main进行单元测试-你可能能够对
Main
所做的事情进行单元测试,但真正的单元测试需要你模拟
寄存器
SetupFilter
方法,只需验证
Main
调用了这两个方法,这可能不是您想要做的。在我看来,对Main方法进行单元测试没有任何意义。通常,当您对一个方法进行单元测试时,您正在测试两件事情中的一件:1。它是返回值,或2。它对应用程序的状态做了一些更改。在这种情况下,您没有设置Main的返回值,状态随着Main的退出而消失。您现有的测试是什么样子的?我相信ops问题实际上与
SetupFilter
是静态的有关。。。不是主要的。你搞错问题了。