2016-05-16 87 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 爲了解決你的問題,我需要更多關於你的配置信息,這將是很多評論領域。謝謝! –