如何使用框架或内置功能将代码作为步骤执行

本文关键字:执行 代码 框架 何使用 内置 功能 | 更新日期: 2023-09-27 18:21:18

我正在寻找一个框架或一种内置的方式来编写易于维护的优雅代码,并执行以下操作。

这是一个例子:

在我的主要方法中,我想做3件事:

  1. 买个蛋糕
  2. 把糖霜涂在蛋糕上
  3. 端上蛋糕

只有当所有三个动作都完成后,我才认为手术成功。如果任何一个特定的行动失败了,我想知道是什么失败了。

为了解决这个问题,我的主要方法可能会看起来像这样:

public void IsBirthdayAsuccess()
{
   var birthdayManager = new birthdayManager(); 
   try
     {
           var cake = birthdayManager.BuyCake(price.cheap, quality.good, delivery.fast);
           Assert.isTrue(cake.ArrivedQuick && cake.IsGood && cake.IsQuick, "Supplier didn't get the cake right"); 
     }
   catch
     {
          Assert.Fail("The birthday operation has failed on step 1 : Buying the cake failed"); 
     }
   try
     {
         birthdayManager.Cakes[0].PutIcingOn("Vanilla");
         Assert.IsTrue(birthdayManager.Cakes[0].IsIced(), "Icing the cake didn't work"); 
     }
   catch
     {
         Assert.Fail("The birthday operation has failed on step 2 : Putting icing on the cake");
     }
   try
     {
         Party.ServeCake(birthdayManager.Cakes[0]);
         Assert.IsTrue(birthdayManager.Cakes[0].IsServed(), "Cake couldn't be served"); 
     }
   catch
     {
         Assert.Fail("The birthday operation has failed on step 3 : Serving the cake");
     }
} 

现在,实际上,这里的"步骤"由代码中的一系列try/catch块表示,但实际上在企业系统的其他地方。这就是为什么我正在寻找一个框架,它可以在函数中提供更一致的"步骤"框架实现。

我本来想自己滚,但也许还有别的东西存在。

如果我自己滚动,结果会是这样的:

public void TestMethod(int id)
{
   var test = new test(id);
   TestSteps
    {
      ["Login to application"]
      TestStep
        {
            test.LoginToApplication(); 
        }
      Assert, "You are not logged in"
        {
            test.IsLoggedIn(); 
        }
      Failure
        {
            Assert.Fail("Test failed on step " + testContext.TestStep.Index); 
        }
    }  

是否存在类似的框架?

编辑:为了重复使用,我可以迭代"Steps"集合和"Step"项目,这意味着我可以在excel或其他地方使用它进行报告。

第2版:"roll your own"示例旨在取代try/catch和流控制的语义,C#是可扩展的吗?

如何使用框架或内置功能将代码作为步骤执行

查看SpecFlow:http://www.specflow.org/,它是一个很棒的基于步骤的测试框架。