BDD と MSpec の初心者である私は、BDD 全般、特に MSpec に関連するベスト プラクティスと良い習慣について、まだ確信が持てません。
次の例を改善できますか? ベストプラクティスと良い習慣に従っていますか?
- 仕様クラスと動作の命名は問題ありませんか?
- このシナリオで動作を使用する必要がありますか、それとも仕様クラスに共通の基本クラスを使用する必要がありますか?
- ここがなくても大丈夫
Establish
ですか? - テスト データを取得するためにスタティック ファクトリ メソッド (
TestData
メソッド) を使用する必要がありますか?それとも仕様自体でデータを作成する必要がありますか? - 使用できる動作の各プロパティをテストする代わりに、
result.Equals()
2 つのことをテストすることになりますが、これは良くありません。
この例を、より良いと思われるものに自由にリファクタリングしてください。
[Subject(typeof(DataItemReader))]
public class When_reading_a_DataItem_from_stream
{
Because of = () =>
{
using (var reader = new DataItemReader(
new MemoryStream(TestData.GetNormalDataItemAsByteArray()), Encryption.None))
{
result = reader.ReadItem();
}
};
Behaves_like<DataItemReader_that_reads_correctly> behavior;
protected static DataItem result;
}
[Subject(typeof(DataItemReader))]
public class When_reading_a_DataItem_from_encrypted_stream
{
Because of = () =>
{
using (var reader = new DataItemReader(
new MemoryStream(TestData.GetNormalDataItemAsByteArrayEncyrpted()), Encryption.Default))
{
result = reader.ReadItem();
}
};
Behaves_like<DataItemReader_that_reads_correctly> behavior;
protected static DataItem result;
}
[Behaviors]
public class DataItemReader_that_reads_correctly
{
protected static DataItem result;
It should_read_the_correct_DataItem = () =>
{
var testItem = TestData.GetNormalDataItem();
result.Property1.ShouldEqual(testItem.Property1);
result.Property2.ShouldEqual(testItem.Property2);
result.Property3.ShouldEqual(testItem.Property3);
};
}