C# c中静态Main()方法的单元测试#
我正在尝试使用VisualStudio单元测试框架为静态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
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
是静态的有关。。。不是主要的。你搞错问题了。