【发布时间】:2015-05-14 04:13:15
【问题描述】:
我正在尝试使用 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 单元测试框架进行设置,我需要断言什么?
【问题讨论】:
-
您正在尝试对您的 IoC 容器进行单元测试?那个疯狂的字符串扩展方法是干什么用的?
-
你打算如何对私有方法进行单元测试?
-
恕我直言,您不应该对 Main 进行单元测试 - 您也许可以对
Maindoes 进行单元测试,但 true 单元测试需要您模拟Register和SetupFilter方法,并验证Main调用这两个方法,这可能不是您想要做的。 -
IMO,对 Main 方法进行单元测试没有任何意义。通常,当您对一个方法进行单元测试时,您正在测试以下两件事之一:1. 它是返回值,或者 2. 它对应用程序的状态所做的一些事情。在这种情况下,您没有设置 Main 的返回值,并且状态随着 Main 的退出而消失。
-
你现有的测试是什么样的?
标签: c# unit-testing vs-unit-testing-framework