0

私がcucumber/gherkin(実際にはspecflow)でテストしようとしているビジネスシナリオは、Webフォームに一連の入力が与えられた場合、リクエストを行い、(特定の条件下で)結果が返された場合、特定のフィールドは変更されていません (他の条件下では変更されています)。例えば

データ入力画面で「frobnicator を更新しない」を選択し、フォームを送信すると結果が表示された場合、frobnicator は更新されません

「フロブニケーターが更新されていません」というステップをどのように記述しますか?

1 つのオプションは、「フォームを送信する」前に「フロブニケーターの値を覚えています」のようなステップを実行することですが、それは少しゴミです。実装の詳細の恐ろしいリークです。それはテストから気をそらすものであり、ビジネスがこれをどのように説明するかではありません. 実際、そのようなセリフは誰が見ても説明しなければなりません。

理想的には書かれているように、これをもう少しうまく実装する方法について誰かアイデアがありますか?

4

2 に答える 2

1

私は前の答えに同意しません。あなたが書きたいと思ったガーキンテキストはおそらく正しいでしょ。ステップがテストされる特定のアクションになるように、少しだけ変更します。When

Given I am on the data entry screen
And I have selected "do not update frobnicator"
When I submit the form
Then the frobnicator is not updated

結果をどの程度正確にアサートするかは、プログラムがフロブニケーターを更新する方法と、提供するオプションによって異なります..しかし、それが可能であることを示すために、UIからデータアクセスレイヤーを切り離し、モックできると仮定しますそれ - したがって、更新を監視します。

私が使用しているモック構文は Moq.

...

private DataEntryScreen _testee;

[Given(@"I am on the data entry screen")] 
public void SetUpDataEntryScreen()
{
    var dataService = new Mock<IDataAccessLayer>();
    var frobby = new Mock<IFrobnicator>();

    dataService.Setup(x => x.SaveRecord(It.IsAny<IFrobnicator>())).Verifiable(); 
    ScenarioContext.Current.Set(dataService, "mockDataService");

    _testee = new DataEntryScreen(dataService.Object, frobby.Object);
}

ここで注意すべき重要なことは、指定されたステップによって、テスト対象のオブジェクトが必要なものすべてでセットアップされるということです...別の面倒なステップは必要ありませんでした。それは利害関係者にとってもコードの柔軟性にとっても悪いことです

[Given(@"I have selected ""do not update frobnicator""")]
public void FrobnicatorUpdateIsSwitchedOff()
{
    _testee.Settings.FrobnicatorUpdate = false;
}

[When(@"I submit the form")]
public void Submit()
{
    _testee.Submit();
}

[Then(@"the frobnicator is not updated")]
public void CheckFrobnicatorUpdates()
{
    var dataService = ScenarioContext.Current.Get<Mock<IDataAccessLayer>>("mockDataService");

    dataService.Verify(x => x.SaveRecord(It.IsAny<IFrobnicator>()), Times.Never);
}

状況に応じてアレンジ、アクト、アサートの原則を適応させます。

于 2012-01-27T21:48:18.037 に答える
0

手動でテストする方法を考えてみてください。

Given I am on the data entry screen
And the blah is set to "foo"
When I set the blah to "bar"
And I select "do not update frobnicator"
And I submit the form
Then the blah should be "foo"
于 2011-05-31T10:26:27.963 に答える