-1

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

功能

 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.行动'

更新 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)

4

1 回答 1

2

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

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

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

改变 :

.Given(InitParameters())

到 :

.Given(InitParameters)

或者

.Given(() => InitParameters())

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

相反,您键入的内容会立即调用该方法并将结果 ( void) 传递给Given(). 这就是为什么编译器抱怨它无法转换voidAction

编辑

看起来所有电话都有相同的问题。都传递函数调用的结果,而不是预期的 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使方法异步,而是它内部发生的事情以及 Task 的返回类型。

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

        .When(()=>FuncExceuted().Wait())
于 2017-10-23T11:19:55.040 回答