2016-05-16 88 views
0

我最近开始一个新项目,并决定使用Specflow 2.1 它附带NUnit3。配有Nunit 3控制台转轮的Specflow测试

目前该项目的设置和Visual Studio中的测试运行器正确执行,但是当我尝试从Nunit 3控制台运行器运行相同的测试时出现错误。

我使用的命令是 nunit3-console.exe --labels=All --framework=net-4.5 Blah.Testing.Specflow.dll

我添加了两个天然NUnit的测试用相同的组件,而这些都是执行细,其是失败

NUnit Console Runner 3.2.1 
Copyright (C) 2016 Charlie Poole 

Runtime Environment 
    OS Version: Microsoft Windows NT 10.0.10586.0 
    CLR Version: 4.0.30319.42000 

Test Files 
    Blah.Testing.Specflow.dll 

=> Blah.Testing.Specflow.MyTest.TestOne 
=> Blah.Testing.Specflow.MyTest.TestTwo 
=> Blah.Testing.Specflow.MyTestFeature.AddTwoNumbers 

Errors and Failures 

1) TearDown Error : Blah.Testing.Specflow.MyTestFeature 
System.ArgumentNullException : Value cannot be null. 
Parameter name: instance 
TearDown : System.NullReferenceException : Object reference not set to an instance of an object. 
    at BoDi.ObjectContainer.RegisterInstanceAs(Object instance, Type interfaceType, String name, Boolean dispose) 
    at TechTalk.SpecRun.SpecFlowPlugin.Runtime.SpecRunTestRunnerManager.CreateTestRunnerInstance() in c:\TeamCity\BuildAgent\work\245a3e4d646c0875\SpecFlowPlugins\TechTalk.SpecRun.SpecFlowPlugin.2-0-0\Runtime\SpecRunTestRunnerManager.cs:line 33 
    at TechTalk.SpecFlow.TestRunnerManager.CreateTestRunner(Int32 threadId) 
    at TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(Int32 threadId) 
    at TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(Assembly testAssembly, Nullable`1 managedThreadId) 
    at Blah.Testing.Specflow.MyTestFeature.FeatureSetup() in D:\Projects\Blah\src\Testing\Blah.Testing.Specflow\MyTest.feature.cs:line 0 
--TearDown 
    at Blah.Testing.Specflow.MyTestFeature.FeatureTearDown() in D:\Projects\Blah\src\Testing\Blah.Testing.Specflow\MyTest.feature.cs:line 0 

2) Error : Blah.Testing.Specflow.MyTestFeature.AddTwoNumbers 
OneTimeSetUp: System.ArgumentNullException : Value cannot be null. 
Parameter name: instance 

Run Settings 
    RuntimeFramework: net-4.5 
    WorkDirectory: D:\Projects\Blah\src\Testing\Blah.Testing.Specflow\bin\Dev 
    ImageRuntimeVersion: 4.0.30319 
    ImageTargetFrameworkName: .NETFramework,Version=v4.5.1 
    ImageRequiresX86: False 
    ImageRequiresDefaultAppDomainAssemblyResolver: False 
    NumberOfTestWorkers: 8 

Test Run Summary 
    Overall result: Failed 
    Test Count: 3, Passed: 2, Failed: 1, Inconclusive: 0, Skipped: 0 
    Failed Tests - Failures: 0, Errors: 1, Invalid: 0 
    Start time: 2016-05-16 00:52:52Z 
    End time: 2016-05-16 00:52:53Z 
    Duration: 0.380 seconds 

Results (nunit3) saved as TestResult.xml 

我试图反映一个specflow测试TechTalk.Specflow Assembly去查看CreateTestRunnerInstance方法,但是没有找到任何有用的指导我的解决方案。

生成步文件的代码是

// ------------------------------------------------------------------------------ 
// <auto-generated> 
//  This code was generated by SpecFlow (http://www.specflow.org/). 
//  SpecFlow Version:2.1.0.0 
//  SpecFlow Generator Version:2.0.0.0 
// 
//  Changes to this file may cause incorrect behavior and will be lost if 
//  the code is regenerated. 
// </auto-generated> 
// ------------------------------------------------------------------------------ 
#region Designer generated code 
#pragma warning disable 
namespace Blah.Testing.Specflow 
{ 
    using TechTalk.SpecFlow; 


    [System.CodeDom.Compiler.GeneratedCodeAttribute("TechTalk.SpecFlow", "2.1.0.0")] 
    [System.Runtime.CompilerServices.CompilerGeneratedAttribute()] 
    [NUnit.Framework.TestFixtureAttribute()] 
    [NUnit.Framework.DescriptionAttribute("MyTest")] 
    public partial class MyTestFeature 
    { 

     private TechTalk.SpecFlow.ITestRunner testRunner; 

#line 1 "MyTest.feature" 
#line hidden 

     [NUnit.Framework.TestFixtureSetUpAttribute()] 
     public virtual void FeatureSetup() 
     { 
      testRunner = TechTalk.SpecFlow.TestRunnerManager.GetTestRunner(); 
      TechTalk.SpecFlow.FeatureInfo featureInfo = new TechTalk.SpecFlow.FeatureInfo(new System.Globalization.CultureInfo("en-US"), "MyTest", "\tIn order to avoid silly mistakes\r\n\tAs a math idiot\r\n\tI want to be told the sum o" + 
        "f two numbers", ProgrammingLanguage.CSharp, ((string[])(null))); 
      testRunner.OnFeatureStart(featureInfo); 
     } 

     [NUnit.Framework.TestFixtureTearDownAttribute()] 
     public virtual void FeatureTearDown() 
     { 
      testRunner.OnFeatureEnd(); 
      testRunner = null; 
     } 

     [NUnit.Framework.SetUpAttribute()] 
     public virtual void TestInitialize() 
     { 
     } 

     [NUnit.Framework.TearDownAttribute()] 
     public virtual void ScenarioTearDown() 
     { 
      testRunner.OnScenarioEnd(); 
     } 

     public virtual void ScenarioSetup(TechTalk.SpecFlow.ScenarioInfo scenarioInfo) 
     { 
      testRunner.OnScenarioStart(scenarioInfo); 
     } 

     public virtual void ScenarioCleanup() 
     { 
      testRunner.CollectScenarioErrors(); 
     } 

     [NUnit.Framework.TestAttribute()] 
     [NUnit.Framework.DescriptionAttribute("Add two numbers")] 
     [NUnit.Framework.CategoryAttribute("mytag")] 
     public virtual void AddTwoNumbers() 
     { 
      TechTalk.SpecFlow.ScenarioInfo scenarioInfo = new TechTalk.SpecFlow.ScenarioInfo("Add two numbers", new string[] { 
         "mytag"}); 
#line 7 
this.ScenarioSetup(scenarioInfo); 
#line 8 
testRunner.Given("I am on the homepage", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Given "); 
#line 9 
testRunner.Then("I set the Implicit Wait to \"5000\"ms", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); 
#line 10 
testRunner.Then("I take a screenshot called \"\"", ((string)(null)), ((TechTalk.SpecFlow.Table)(null)), "Then "); 
#line hidden 
      this.ScenarioCleanup(); 
     } 
    } 
} 
#pragma warning restore 
#endregion 

任何帮助,将不胜感激

+0

您能否提供您的步骤文件中的代码?如果你有一个 –

+0

我已经添加了生成的文件,那么这个步骤将被赋予'[OneTimeSetUp]'。似乎没有在任何生成的代码上生成OneTimeSetup Attrib。 其值得注意的是,我使用的是nunit测试提供程序 Ettienne

回答

0

看起来,你有SpecFlow +亚军(SpecRun)插件还配置。

TechTalk.SpecRun.SpecFlowPlugin .Runtime.SpecRunTestRunnerManager.CreateTestRunnerInstance(c)中:\ TeamCity的\ BuildAgent \工作\ 245a3e4d646c0875 \ SpecFlowPlugins \ TechTalk.SpecRun.SpecFlowPlugin.2-0-0 \运行\ SpecRunTestRunnerManager。 cs:第33行

请检查app.config中的插件和unittestprovider设置。 之后,重新生成所有功能代码隐藏文件(简单保存功能文件)。

+0

嗨@Andreas非常感谢你指出它的工作原理! 我确实添加了NUnit测试提供程序,但保留了SpecRun插件(我的印象是这只适用于VS运行,不会影响生成的程序集) 当我删除Specrun插件部分并重新生成后台代码它都开始工作:) – Ettienne

+0

你是如何解决这个问题的?我有非常类似的问题。每当我运行测试时,它总是会丢弃SpecFlowNUnitExtension.cs文件中的异常,这让我很生气。在我的配置文件中设置了以下内容:将SpecRun设置为测试运行器工具。 – Jakubee

+0

@Jakubee你可以在这里打开一个关于它的问题:https://github.com/techtalk/SpecFlow 为了解决你的问题,我需要更多关于你的配置信息,这将是很多评论领域。谢谢! –