【问题标题】:How are unit tests compiled in c# test projects?c#测试项目中的单元测试是如何编译的?
【发布时间】:2017-08-11 22:11:18
【问题描述】:

我已经阅读了有关为我的 .net 4.5 应用程序使用“测试”项目编写单元测试的教程,但我不明白它们是如何运行的。

当我在我的项目中运行测试特定类方法的单元测试时,是否为每个测试重新编译方法的整个项目?

我对测试如何与他们正在测试的方法交互感到困惑。测试本身是否已编译?我想他们必须是因为它是 c#。测试是否有单独的二进制文件?

【问题讨论】:

  • 您的问题具体到 ASP.Net 的方式是什么? (我怀疑您真正的问题是“如果我自己不创建 EXE,如何执行来自 DLL/程序集的代码” - 如果不是,那么答案是因为还有其他人可以创建可执行文件来加载此类程序集并运行代码他们甚至没有链接到此类程序集stackoverflow.com/questions/12723304/…)
  • 嗯,我确实必须添加对在我的测试项目中测试的类库(项目)的引用。那么我的测试项目是否会在运行之前加载该项目的已编译 dll?
  • 从构建或执行的角度来看,单元测试项目绝对没有什么特别之处 - 它的行为与代码从另一个程序集调用方法的任何其他情况相同......关于单元的唯一“特殊”事情测试项目,他们被配置为使用测试运行器作为可执行文件来加载和运行所有标有TestMethodAttribute的方法。

标签: c# asp.net .net visual-studio mstest


【解决方案1】:

您实际上不能独立运行单元测试。通常,它们将由“测试运行者”执行,例如内置 MSTest 测试运行或NUnit test runner adapter。这个过程是这样的:

  1. 您编写测试,用特定属性标记测试类,例如[TestClass][TestFixture]

  2. 测试类被编译成 DLL。

  3. 您可以使用 Visual Studio 中的菜单项启动您的测试运行程序(或者它是作为自动构建过程的一部分启动的)。

  4. 测试运行程序加载单元测试 DLL。

  5. 测试运行程序加载 DLL 中的所有类型并使用反射来定位具有指示它包含测试的神奇属性的类型(类)。

  6. 测试运行程序实例化测试类/夹具。

  7. 测试运行程序迭代 DLL 中具有 [Test][TestMethod] 属性的方法。

  8. 测试运行器使用Invoke()调用每个方法。

  9. 测试运行器在测试运行器 UI 中显示其测试结果,或将其输出到报告中。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2018-08-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-08-03
    • 1970-01-01
    • 2014-10-01
    相关资源
    最近更新 更多