我正在寻找一种在.NET项目中组织单元测试的好方法。现在,每个应用程序类有一个TestClass
,每个方法都有多个测试。虽然我使用TestCategory
通过它测试的应用程序类方法对每个TestMethod
进行分类,但找到我的测试方法变得笨拙。
我正在考虑将我的测试类拆分为部分类 - 每个应用程序类方法一个部分类。这意味着我可以在每个方法的一个专用文件中有多个TestMethod
,而无需通过大文件来查找它们。
这种方法有什么缺陷吗?在.NET和Visual Studio中有更好的方法来处理大型测试类吗?
编辑:我正在使用IoC(我们在测试之外使用Castle.Windsor作为DI)我们正在使用Moq来进行模拟功能。测试使用TestInitialize
初始化。
答案 0 :(得分:0)
我会让你的测试简单明了。分离您的测试可能是有益的,但您在哪里初始化您的测试代码?您是否正在使用Inversion of Control来完成其他测试应该已经完成的工作?如果是这样,那么您可能希望查看[TestInitialize]并开始组织您的依赖项。
这就是我对集中TestInit的意思
[TestClass]
public class UnitTestWebsiteBuilderPattern
{
private IHtmlInputService _htmlInputService;
private IHtmlControlService _htmlControlService;
private IHtmlMenuControlService _htmlMenuControlService;
private IHtmlConditionalInputService _htmlConditionalInputService;
private IHtmlPanelService _htmlPanelService;
private IHelpIconService _helpIconService;
private IHtmlModalService _htmlModalService;
[TestInitialize]
public void Init()
{
_helpIconService = new HtmlHelpIconService();
_htmlInputService = new HtmlInputService(_helpIconService);
_htmlPanelService = new HtmlPanelService(_htmlInputService);
_htmlModalService = new HtmlModalService(_htmlPanelService);
_htmlControlService = new HtmlControlService(_htmlPanelService);
_htmlMenuControlService = new HtmlMenuControlService();
_htmlConditionalInputService = new HtmlConditionalInputService();
}
答案 1 :(得分:0)
看看我的回答C# ASP.NET MVC Controller unit test。 它的要点是:
另一个关于此设置的好处是它为您提供了一个很好的测试树,如果您使用resharper单元测试会话以便能够轻松找到您的测试。
至于第一个答案,你不应该在测试中使用DI框架。应该模拟/伪造所有外部依赖项,以便您只测试被测系统。
使用部分课程。见Are C#'s partial classes bad design?
我同意卡拉的观点,使用偏分类只是为了拆分长类被认为是糟糕的设计。如果你的班级如此之大,也许需要分手。