【问题标题】:TestInitialize vs ClassInitializeTestInitialize 与 ClassInitialize
【发布时间】:2014-04-10 21:55:54
【问题描述】:

MSTest 中的TestInitializeClassInitialize 有什么区别?各有什么优缺点?

我的印象是TestInitialze 应该每次都运行 EACH 测试?那是对的吗?并且ClassInitialize 会在每次任何类的新实例时运行?

【问题讨论】:

    标签: c# mstest vs-unit-testing-framework


    【解决方案1】:

    这两个属性仅适用于它们所属的类(因此也适用于测试)。

    TestInitialize在每个测试之前运行,该测试在声明属性的同一类上声明。

    ClassInitialize在声明属性的类的初始化时运行。换句话说,它不会为每个班级运行。仅适用于包含ClassInitialize 方法的类。

    如果您想要一个在所有测试或类初始化之前运行一次的方法,请使用AssemblyInitialize

    【讨论】:

    • ClassInitialize 和 AssemblyInitialize 的用例是什么?我很难获得 ClassInitialize 的实际用例...
    • 一个用例是使用需要很长时间才能运行的初始化方法为 DLL 运行集成测试。 ClassInitialize 可用于在批次测试开始时执行初始化,ClassCleanup 将调用 DLL 的终止方法。
    • 另一种情况可能是设置具有大量注入依赖项和模拟设置的对象。我有一些包含 100 多行的测试类,否则每次测试都需要。
    • @DPH TestInitialize 对重复代码有好处,只有运行代码需要很长时间才会使用 ClassInitialize
    【解决方案2】:

    由于 ClassInitialize 和 ClassCleanUp 是静态的,即使 MSTest 可以创建测试类的多个实例,它们也只会执行一次。

    您可以在此处阅读更多信息:That Pesky MSTest Execution Ordering.. docs.microsoft.com

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2020-03-29
      • 1970-01-01
      • 2013-12-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多