将测试类拆分为部分类?

时间:2016-05-18 14:14:28

标签: c# .net visual-studio

我正在寻找一种在.NET项目中组织单元测试的好方法。现在,每个应用程序类有一个TestClass,每个方法都有多个测试。虽然我使用TestCategory通过它测试的应用程序类方法对每个TestMethod进行分类,但找到我的测试方法变得笨拙。

我正在考虑将我的测试类拆分为部分类 - 每个应用程序类方法一个部分类。这意味着我可以在每个方法的一个专用文件中有多个TestMethod,而无需通过大文件来查找它们。

这种方法有什么缺陷吗?在.NET和Visual Studio中有更好的方法来处理大型测试类吗?

编辑:我正在使用IoC(我们在测试之外使用Castle.Windsor作为DI)我们正在使用Moq来进行模拟功能。测试使用TestInitialize初始化。

2 个答案:

答案 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?

我同意卡拉的观点,使用偏分类只是为了拆分长类被认为是糟糕的设计。如果你的班级如此之大,也许需要分手。