_Kevin が言及した Dan North の記事は素晴らしいです。
ただし、実際に作成するか、少なくともクライアント/ユーザーから収集する必要がある「ユーザー ストーリー」があることを忘れないでください。これらは、「私が欲しいので、そのように」タイプの物語です。
次に、ユーザー ストーリーがいつ、どのように満たされていると見なされるかを特定する受け入れ基準があります。それはあなたが投稿に書いたようなものです:「x のとき、y のはずです。」
ここには、プロジェクト管理システムで「システム ストーリー」と呼んでいるものや、テストで「仕様」と呼んでいるものと多くの重複があります。これらは、ユーザーが認識していない可能性のある動作を指定しますが、クラス間の相互作用を記述します。システム ストーリー: 「LoginHandler にログインとパスワードが与えられると、LoginValidator でデータを検証する必要があります。」仕様:
[TestFixture]
public class When_the_login_handler_is_given_a_login_and_password
{
constant string login = "jdoe";
constant string password = "password";
static LoginValidator loginValidator;
context c = () => loginValidator = an<ILoginValidator>;
because b = () => sut.Validate(login, password);
it should_validate_the_data_with_a_LoginValidator =
() => loginValidator.was_told_to(x => x.DoValidation(login, password));
}
テスト構文は気にしないでください。仕様テキスト自体がテスト クラス名とメソッド名に組み込まれていることがわかります。さらに、テスト/仕様は実際にクラスの動作をテストしています。このような単純なユーザー ストーリーのテストに合格すると、受け入れ基準が満たされたことになります。