StoryQ BDD调用任务C#

StoryQ BDD调用任务C#,c#,unit-testing,bdd,storyq,C#,Unit Testing,Bdd,Storyq,我有一个测试,我想使用一个返回任务的函数 作用 public async Task FuncExceuted() 我的测试 [Test] public void CreateNewProject() { _story.WithScenario("Create a new Project for Bayer sensor") .Given(InitParameters()) .When(await FuncEx

我有一个测试,我想使用一个返回任务的函数

作用

 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:无法等待“方法组”
错误CS1502:与“StoryQ.Condition.When(System.Action)”匹配的最佳重载方法具有一些无效参数
错误CS1503:参数1:无法从“void”转换为“System.Action”

更新2:

[测试]

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()
,而不是任何任务:

错误CS1502:“StoryQ.Scenario.给定的(System.Action)”的最佳重载方法匹配具有一些无效参数

错误CS1503:参数1:无法从'void'转换为'System.Action'

更改:

.Given(InitParameters())
致:

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

您键入的内容将立即调用该方法,并将结果(
void
)传递给
Given()
。这就是为什么编译器抱怨它不能将
void
转换为
Action

编辑

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

该代码应替换为:

   _story.WithScenario("Create a new  Project for Bayer sensor")
        .Given(()=>InitParameters())
        .When(async ()=>await FuncExceuted())
        .Then(() => AssertFunction())
        .Execute();
FuncExecuted
不是函数。这是一种异步方法。使用异步方法的标准命名约定,应将其命名为
executeasync

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

        .When(()=>ExceutedAsync())
还有。使方法异步的不是
async/await
,而是方法内部的情况和任务的返回类型

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

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

这与任务无关<代码>给定的需要一个操作委托/lambda,而不是调用委托人的结果现在有两个错误-
async void
仅适用于事件处理程序。签名应该是
异步任务
<代码>等待函数本身执行可能会引发错误。lambda应该是异步的<代码>等待对结果进行操作。它应该是
async()=>await FuncExecuted()
hmmm让我试试看我试过了,它会给相同的错误提供与“StoryQ.Scenario.When(System.Action)”匹配的最佳重载方法,但对于When…@Gilad,则对
When
执行相同的操作。错误是不一样的,但它们很漂亮clear@Gilad你在这里输入的代码无法回答这个问题。这是指您现在实际的BDD描述。您可能应该发布一个带有相关代码的新问题。在你发布的代码中没有带下划线的方法我发布了一个像你建议的那样的新问题
        .When(()=>ExceutedAsync())
        .When(()=>FuncExceuted().Wait())