如何使用框架或内置功能将代码作为步骤执行
本文关键字:执行 代码 框架 何使用 内置 功能 | 更新日期: 2023-09-27 18:21:18
我正在寻找一个框架或一种内置的方式来编写易于维护的优雅代码,并执行以下操作。
这是一个例子:
在我的主要方法中,我想做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/,它是一个很棒的基于步骤的测试框架。