私はEncypt
とDecrypt
という文字列を持つ静的クラスCryptographic
を持っています。私はこれに次の仕様を書いています:これはクリーンなBDD/MSpecテストですか?
[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_a_string
{
Establish context =() => { input = "teststring"; };
Because of =() =>
{
output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
};
It should_decrypt_what_was_encrypted =() => input.ShouldEqual(output);
static string input;
static string output;
}
[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_an_empty_string
{
Establish context =() => { input = string.Empty; };
Because of =() =>
{
output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
};
It should_decrypt_what_was_encrypted =() => input.ShouldEqual(output);
static string input;
static string output;
}
[Subject(typeof(Cryptographic))]
class When_encrypting_and_decrypting_a_null_string
{
Establish context =() => { input = null; };
Because of =() =>
{
output = Cryptographic.Decrypt(Cryptographic.Encrypt(input));
};
It should_decrypt_what_was_encrypted =() => input.ShouldEqual(output);
static string input;
static string output;
}
これはクリーンBDDユニットテストですか?改善できるものはありますか? 私の側から懸念のカップル:
- 私は実際に 1をテストする必要がどこ私は、ここに二つのことをテストしている可能性があります。私は
Encrypt
とDecrypt
の両方をBecause
に持っています。 - テストには多くのコピーと貼り付けが必要ですが、すべてのテストは入力引数だけが異なります。これを改善することができますか、それとも、何らかの行テストを使用して 、あるいは共通の基本クラスまたは
Behaves
句を代わりに使用することで改善できますか?私は可読性が現在かなり最適であることを意味しますが、保守性はありません。メンテナンス性(DRY)を最適化すれば、私は が読みやすい状態で取引されている可能性があります。
このテスト/スペックはどのように記述しますか?
私は、BDDの単体テストを使用しないときは、非常に必要な記事を作成すると思います。 BDDは一般にTDD vNext(「BDDはTDDが正しく行われました」)として認識されていますが、TDDツールを選択する方が良いシナリオが明確に定義されていると確信しています。この例は、システムの他の部分と相互作用しない理由であるパブリックAPIの一部です。何か私は、パブリックAPIの指定/テストがそのシナリオの1つだと思うようになります。 – bitbonk