StoryQ BDD 调用任务 C#

StoryQ BDD calling a Task C#

我有一个测试,我想在其中使用 returns 一个 Task

的函数

函数

 public async Task FuncExceuted()

我的测试

 [Test]
    public void CreateNewProject()
    {
        _story.WithScenario("Create a new  Project for Bayer sensor")
            .Given(InitParameters())
            .When(await FuncExceuted())
            .Then(AssertFunction())
            .Execute();
    }

有没有办法使用 StoryQ,因为这些是我得到的错误:
错误 CS1502:'StoryQ.Scenario.Given(System.Action)' 的最佳重载方法匹配有一些无效参数
错误 CS1503:参数 1:无法从 'void' 转换为 'System.Action'

更新: 我也试过

[Test]

public async void CreateNewProject()
{
    _story.WithScenario("Create a new  Project for Bayer sensor")
        .Given(InitParameters)
        .When(await FuncExceuted)
        .Then(AssertFunction)
        .Execute();
}

错误 CS4001:无法等待 'method group'
错误 CS1502:'StoryQ.Condition.When(System.Action)' 的最佳重载方法匹配有一些无效参数
错误 CS1503:参数 1:无法从 'void' 转换为 'System.Action'

更新二:

[测试]

public async Task CreateNewProject()
{
    _story.WithScenario("Create a new  Project for Bayer sensor")
        .Given(InitParameters)
        .When(async ()=> await FuncExceuted())
        .Then(AssertFunction)
        .Execute();
}

编译中!但运行时错误 ArgumentException -> 如果您在方法名称中使用 2 个下划线,请确保有 2 个参数(找到 0 个)

错误抱怨 Given(),不是任何任务:

error CS1502: The best overloaded method match for 'StoryQ.Scenario.Given(System.Action)' has some invalid arguments

error CS1503: Argument 1: cannot convert from 'void' to 'System.Action'

变化:

.Given(InitParameters())

收件人:

.Given(InitParameters)

.Given(() => InitParameters())

Given() 需要一个 Action 委托,或者可以转换为 Action 的东西。当执行测试时,StoryQ 本身将调用该操作。

您输入的内容会立即调用该方法并将结果 (void) 传递给 Given()。这就是编译器抱怨无法将 void 转换为 Action

的原因

编辑

看起来所有的电话都有同样的问题。全部传递函数调用的 结果 而不是预期的 Action 或 Func.

代码应替换为:

   _story.WithScenario("Create a new  Project for Bayer sensor")
        .Given(()=>InitParameters())
        .When(async ()=>await FuncExceuted())
        .Then(() => AssertFunction())
        .Execute();

FuncExecuted 不是 函数 。这是一种异步方法。使用异步方法的标准命名约定,它应该命名为 ExecutedAsync.

如果 StoryQ 可以处理异步方法,可以简单地写成:

        .When(()=>ExceutedAsync())

还有。使方法异步的不是 async/await,而是它内部发生的事情和 return 类型的任务。

如果 StoryQ 无法处理异步方法,则可能必须显式等待该方法,例如:

        .When(()=>FuncExceuted().Wait())