Specflow入门-(3)简单case的实现及运行

Feature文件已经写好了,Scenario下的Step的Definition也已经完成,但是注意到在ArithmeticFeatureStepDefinition.cs文件中Step的代码并没有做实际的事情,就是说该Step对应的函数并没有依照Step的文字描述信息做对应的事情。

现在,我们就开始做这件事。既然是要测试四则运算,我们得提供一个能四则运算的程序。这里我们用一个简单的类来实现该功能:

什么东西能做四则运算?很容易想到计算器。写一个如下的简单计算器类Calculator用于测试。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace SpecflowSample.UnderTest
{
    class Calculator
    {
        private List<double> numbers = new List<double>();

        public double Result { get; private set; }

        public void EnterNumber(double number)
        {
            if (numbers.Count == 2)
            {
                numbers.RemoveAt(0);
            }

            numbers.Add(number);
        }

        public void Operate(string operatorType)
        {
            switch (operatorType)
            {
                case "add":
                    Result = numbers.Sum();
                    break;
                case "subtract":
                    Result = numbers[0] - numbers[1];
                    break;
                case "mutiply":
                    Result = numbers[0] * numbers[1];
                    break;
                case "divide":
                    Result = numbers[0] / numbers[1];
                    break;
            }
        }
    }
}

我们将为StepDefinition填充要执行的代码:

using SpecflowSample.UnderTest;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using TechTalk.SpecFlow;

namespace SpecflowSample.StepDefinitions
{
    [Binding]
    public sealed class ArithmeticFeatureStepDefinition
    {
        private Calculator calculator = new Calculator();

        [Given("I have entered (.*) into the calculator")]
        public void GivenIHaveEnteredSomethingIntoTheCalculator(int number)
        {
            calculator.EnterNumber(number);
        }

        [When("I press add")]
        public void WhenIPressAdd()
        {
            calculator.Operate("add");
        }

        [Then("the result should be (.*) on the screen")]
        public void ThenTheResultShouldBe(int result)
        {
            Assert.AreEqual(result, calculator.Result);
        }
    }
}

这样,每个StepDefinition就按照Step语句的描述信息做了对应的事情。但是,我们的Feature还不能运行。

其实,Specflow将我们的StepDefinition最终翻译成了对应的某个测试框架的代码(即一个个的testcase),可以展开feature.cs文件查看


而Specflow使用的默认测试框架是Nunit,而我们创建的项目使用Mstest。通过修改配置文件app.config添加<unitTestProvider name="mstest">结点来更换。

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <configSections>
    <section name="specFlow" type="TechTalk.SpecFlow.Configuration.ConfigurationSectionHandler, TechTalk.SpecFlow" />
  </configSections>
  <specFlow>
    <unitTestProvider name="mstest"/>
    <!-- For additional details on SpecFlow configuration options see http://go.specflow.org/doc-config -->
  </specFlow>
</configuration>

现在我们重新生成项目,就可以调试case了。

打开测试资源管理器,就可以看到我们添加的两个Scenario对应的test case了


在第一条case AddTwoNumbers 上右击运行选定的测试,即可运行该条case



猜你喜欢

转载自blog.csdn.net/qq_42412416/article/details/80617254
今日推荐