如何通过测试工具运行SpecFlow测试?

时间:2014-03-21 14:02:42

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

下午好/早上/晚上的人,

我想知道我是否有可能执行"通过某种测试工具(不是NUnit)进行SpecFlow测试?

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

我假设在创建DLL时理论上可以做到这一点,但我想知道如何获得所有的参数等。

所以简而言之,这是否可能,如果有直接的方法来做这件事,还是我咆哮错误的树?

2 个答案:

答案 0 :(得分:0)

这是可能的,但我不清楚为什么你会这么想。

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

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

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

答案 1 :(得分:0)

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

以下是我的一些代码:

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方法,然后执行测试方法本身。运行测试后,我执行清理方法。

看起来有点hacky,NUnit似乎是某些人的合理选择,但正如我之前提到的,我需要一种可定制的方法。谢谢你提出的所有建议。