【问题标题】:Unit Testing, automate to display Assert result for every object in collection单元测试,自动显示集合中每个对象的断言结果
【发布时间】:2016-12-14 14:11:41
【问题描述】:

我是单元测试实践的新手,我遇到的问题在下面的代码中,TestEnums 方法似乎在第一次 Assert 失败时停止/中断迭代,我的意思是,它只显示一个失败的错误测试资源管理器中的消息。

我想修改此代码以显示所有Test Explorer 中失败的断言,即每个未通过 EnumHasRepeatedValues 方法的断言的测试 Enum .

Imports Microsoft.VisualStudio.TestTools.UnitTesting
Imports System.Reflection

<TestClass()>
Public Class Application

    <TestMethod()>
    Public Sub TestEnums()
        Dim ass As Assembly = Assembly.Load("Elektro.Application")

        Dim types As IEnumerable(Of Type) =
            From t As Type In ass.GetTypes() Where t.IsEnum

        For Each t As Type In types
            EnumHasRepeatedValues(t)
        Next
    End Sub

    Public Sub EnumHasRepeatedValues(ByVal t As Type)
        Assert.AreEqual([Enum].GetValues(t).Length,
                        [Enum].GetNames(t).Length,
                        String.Format("Enum {0}.{1} has defined repeated values.", 
                                      t.Namespace, t.Name))
    End Sub

End Class

【问题讨论】:

  • 你读过this关于使用数据源的内容吗?
  • @Pro Grammer 感谢您的评论,但是,我不确定这种解决方案是否可以帮助我实现这一目标,是否有必要像 MSDN 示例中那样生成数据库?
  • 据我所知,您可以将CSV, XML or a local data source 嵌入到您的测试库中。它不必是一个完整的数据库。我还找到了this,这可能会更有帮助
  • 考虑使用NUnit。它有test summary 甚至html reports 的工具。即使这不是您正在寻找的 100%,它也比 MSUnit 更加强大和灵活。
  • @Alex B 谢谢,但它是一个新建项目,嗯...少于那个,它是一个免费的开源项目,单元测试应该可供最终用户编译,无需强迫他们安装 Nunit、NCrunch、JustMock 或其他任何第三方解决方案。如果只是为了我,那么我可能会安装比 Microsoft 提供的更灵活的东西。

标签: .net vb.net unit-testing assert


【解决方案1】:

测试方法应该相互独立。不要从其他测试方法调用测试方法。

根据定义,测试在您的第一个断言失败时失败,这就是您只看到一个测试失败的原因。

如果要测试所有枚举值,请为每个值编写单独的测试。

【讨论】:

  • 感谢您的回答,但我不能这样做,实际上是 200 多个枚举计算所有要测试的程序集。出于这个原因,我需要以公开的方式自动化枚举测试。
  • 好吧,假设一个测试失败了一次,它只显示一条消息,然后你修复了那个错误,然后再次运行测试,然后它又失败了,总是有一条错误消息,它松散的时间,这没有效率,对我来说,一次知道所有错误/失败的测试总是比每回合只知道一个更好。 (对不起我的英语不好)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-06-25
  • 1970-01-01
  • 2016-10-19
  • 2012-09-26
相关资源
最近更新 更多