C# 如何通过测试线束运行SpecFlow测试?

C# 如何通过测试线束运行SpecFlow测试?,c#,visual-studio-2013,mstest,specflow,C#,Visual Studio 2013,Mstest,Specflow,各位下午好/早上好/晚上好 我想知道我是否可以通过某种测试工具(不是NUnit)来“执行”SpecFlow测试 以前,我构建的测试工具通过在编译测试时创建的DLL中调用方法来运行MS单元测试 我假设这在理论上也是可能的,因为DLL被创建了,但是我想知道它如何得到所有的参数等等 简而言之,如果是这样的话,这是可能的,是有一个直接的方法来做这件事,还是我找错了方向?这是可能的,但我不清楚你为什么要这么做 Specflow基本上只是一种生成测试的聪明方法。通常这些是nUnit测试,但也可以切换为使用m

各位下午好/早上好/晚上好

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

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

我假设这在理论上也是可能的,因为DLL被创建了,但是我想知道它如何得到所有的参数等等


简而言之,如果是这样的话,这是可能的,是有一个直接的方法来做这件事,还是我找错了方向?

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

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

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


没有什么可以阻止你写你自己的跑步者,但是我不知道你为什么要这么做。nUnit以xml格式提供了大量测试运行成功的报告,因此编写一些东西来解析它可能会更快。

因此我决定为此投入一些时间,并认为使用反射是完成此任务的方法

以下是我的一些代码:

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中搜索该测试方法,然后执行初始化方法,然后执行测试方法本身。测试运行后,我执行cleanup方法


它可能看起来有点粗糙,对于一些人来说,NUnit似乎是合乎逻辑的选择,但正如我前面提到的,我需要一种可定制的方法。谢谢你的建议。

你指的是哪些论点?SpecFlow生成NUnit测试夹具,每个夹具都包含许多无参数方法。你到底为什么要编写自己的测试工具?普通图书馆的轮子对你来说是不是太圆了?阿伦,这是一个建设性的评论吗?似乎不是这样。我有定制的日志记录和COBOL例程,必须在测试之间调用,所以我编写了一个测试工具来处理所有这些。我最近看到的MsTests的特性比nUnit少得多。但对我来说,最后一个致命的问题是:MsTest是,你需要安装Visual Studio Premium或更好的软件来运行这些该死的东西。看在上帝的份上,你应该在你的构建服务器上安装VS。我使用MSTest,因为这是我们的开发人员使用的。我看了NUnit,似乎还可以,但我更喜欢我自己的测试工具,因为它可以完成业务要求的额外任务。PS我们都有VS Ultimate,所以成本对我们来说不是问题。我只是想要一个更定制的UI来为业务运行它们,我现在构建并部署了它。