【问题标题】:How to run a SpecFlow test through a test harness?如何通过测试工具运行 SpecFlow 测试?
【发布时间】:2014-04-28 22:51:02
【问题描述】:

大家下午好/早上好/晚上好,

我想知道我是否可以通过某种测试工具(不是 NUnit)“执行”SpecFlow 测试?

之前我构建的测试工具通过调用编译测试时创建的 DLL 中的方法来运行 MS 单元测试。

我假设由于创建了 DLL,理论上也是可能的,但我想知道它将如何获取所有参数等。

简而言之,如果可以的话,这可能吗?有没有直接的方法可以做到这一点,还是我找错了树?

【问题讨论】:

  • 你指的是哪些论据? SpecFlow 生成 NUnit 测试夹具,每个夹具都包含许多无参数方法。
  • 您到底为什么要编写自己的测试工具?普通的图书馆轮子对你来说太圆了吗?
  • Aron 这句话的意思是建设性的评论吗?似乎并非如此。我有必须在测试之间调用的自定义日志记录和 COBOL 例程,所以我编写了一个测试工具来处理所有这些。

标签: c# visual-studio-2013 mstest specflow


【解决方案1】:

这是可能的,但我不清楚你为什么要这样做。

Specflow 基本上只是一种生成测试的聪明方法。通常这些是 nUnit 测试,但它们也可以切换为使用 mstest。当您将编辑保存到 .feature 文件时,VS 会运行一个自定义工具,将您的纯文本转换为 .feature.cs 文件,该文件包含您编写的代码版本,其中 nUnit 属性应用于方法。

稍后,一个 nUnit 运行程序(nUnit、resharper、gallio、teamcity 等)加载 dll 并在标有 [TestFixture] 的公共类中查找所有标有 [Test] 的公共方法。这些方法被调用。

没有什么可以阻止您编写自己的跑步者,但是我不确定您为什么要这样做。 nUnit 以 xml 格式提供测试运行成功的广泛报告,因此仅编写一些内容来解析它可能会更快。

【讨论】:

  • MsTests 我上次查看它的功能远少于 nUnit。但对我来说,最后的钉子是:MsTest 是您需要安装 Visual Studio Premium 或更好的版本才能运行该死的东西。看在上帝的份上,您应该在构建服务器上安装 VS。
  • 我使用 MSTest 作为我们的开发人员使用的。我查看了 NUnit,它看起来不错,但我更喜欢我自己的测试工具,因为它可以完成业务要求的额外任务。
  • PS 我们都有 VS Ultimate,所以成本对我们来说不是问题。我只是想要一个更加自定义的 UI 来为业务运行它们,我现在已经构建并部署了它。
【解决方案2】:

所以我决定在这方面投入一些时间,并认为使用反射是完成这项任务的方法。

这是我的一些代码:

TestRunner.TestDLLString = getDLL(project);
            var TestDLL = Assembly.LoadFrom(TestDLLString);

            Type myClassType = TestDLL.GetType("SeleniumDPS." + testname);


            var instance = Activator.CreateInstance(myClassType);

            MethodInfo myInitMethod = myClassType.GetMethod("Initialize");


            try
            {
                myInitMethod.Invoke(instance, null);
            }
            catch (Exception ex)
            {
//Error logging etc
            }

然后我对“[TestMethod]”等重复一遍。我理解有些人不喜欢反射,但在这种情况下,性能并不重要,所以它对我们来说效果很好。

所以本质上我所做的是从 XML 文件中读取测试的名称,然后在 DLL 中搜索该测试方法,然后执行 Intitialize 方法,然后再执行测试方法本身。测试运行后,我执行清理方法。

这可能看起来有点老套,对于某些人来说,NUnit 似乎是合乎逻辑的选择,但正如我之前提到的,我需要一种可定制的方法。不过感谢所有建议。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2016-07-11
    • 1970-01-01
    • 2014-03-14
    • 1970-01-01
    • 2013-04-02
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多