gpt4 book ai didi

c# - 如何编写基于验收的测试(从代码的角度来看)

转载 作者:行者123 更新时间:2023-11-28 20:45:03 24 4
gpt4 key购买 nike

我一直在研究基于验收的测试,它们看起来相当不错,因为它们更自然地适合基于特性的开发。

问题是我不知道如何在代码中布置它们。我想尝试避免引入另一个框架来处理这个问题,所以我只是在寻找一种简单的方法来启动和运行这些测试。

我愿意接受代码结构所需的任何更改。我还使用规范来建立复杂的验收标准。

我正在尝试做的示例:

public class When_a_get_request_is_created
{
private readonly IHttpRequest _request;

public When_a_get_request_is_created()
{
_request = new HttpRequest();
}

// How to call this?
public void Given_the_method_assigned_is_get()
{
_request = _request.AsGet();
}

// What about this?
public void Given_the_method_assigned_is_not_get()
{
_request = _request.AsPost();
}

// It would be great to test different assumptions.
public void Assuming_default_headers_have_been_added()
{
_request = _request.WithDefaultHeaders();
}

[Fact]
public void It_Should_Satisfy_RequestIsGetSpec()
{
Assert.True(new RequestUsesGetMethodSpec().IsSatisfiedBy(_request));
}
}

我在这里可能完全偏离了主题,但本质上我希望能够使用不同的假设和给定的条件运行测试。我不介意我是否必须开设更多类(class)或进行少量重复,只要我可以指出某人进行测试以验证给定标准即可。

最佳答案

我强烈建议使用像 SpecFlow 甚至 MSpec 这样的 ATDD 框架来创建这种性质的测试。实现 SpecFlow 就是使用领域特定语言编写您的规范,如果合适的话,与领域专家合作,然后通过代码满足功能中定义的场景步骤。如果不进一步了解您的具体要求,很难补充代码方面的内容,但示例功能可能如下所示:

Feature: HTTP Requests
In order to validate that HTTP requests use the correct methods
As a client application
I want specific requests to use specific methods

Scenario Outline: Making HTTP Requests
Given I am making a request
When the method assigned is <Method>
And the <Header> header is sent
Then it should satisfy the requirement for a <Method> request

Examples:
| Method | Header |
| Get | Header 1 |
| Get | Header 2 |
| Get | Header 3 |
| Post | Header 1 |

然后在绑定(bind)到该功能的步骤中,您可以编写满足规范步骤的代码。这是一个示例:

[Binding]
public class HttpRequestSteps
{
[When(@"the method assigned is (.*)")]
public void WhenTheMethodAssignedIs(string method)
{
// not sure what this should be returning, but you can store it in ScenarioContext and retrieve it in a later step binding by casting back based on key
// e.g. var request = (HttpRequest)ScenarioContext.Current["Request"]
ScenarioContent.Current["Request"] = _request.AsGet();
}
}

关于c# - 如何编写基于验收的测试(从代码的角度来看),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14708479/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com