1

私は受け入れベースのテストを研究してきましたが、機能ベースの開発により自然に適合するため、非常に見栄えがします。

問題は、それらをコードでレイアウトする方法がわからないことです。これを処理するために別のフレームワークを使用しないようにしたいので、これらのテストを起動して実行するための簡単な方法を探しています。

コード構造に必要な変更は何でも受け付けています。また、仕様を使用して複雑な受け入れ基準を構築しています。

私がやろうとしていることのサンプル:

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));
    }
}

私はここでは完全にマークから外れているかもしれませんが、基本的には、さまざまな仮定と与えられた条件でテストを実行できるようにしたいと思います。与えられた基準を検証するために誰かにテストを指示できる限り、クラスを増やしたり、マイナーな複製を作成したりする必要があるかどうかは気になりません。

4

1 に答える 1

1

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 |

次に、機能にバインドされているステップで、仕様ステップを満たすコードを記述できます。一例を次に示します。

[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();
    }
}
于 2013-02-05T14:01:17.457 に答える