作为 BDD 和 MSpec 初学者,我仍然不太确定与 BDD 相关的最佳实践和良好习惯,尤其是与 MSpec 相关的最佳实践。
下面的例子可以改进吗?它是否遵循最佳实践和良好习惯?
- 我的规范类和行为的命名是否正常?
- 我应该在这种情况下使用行为还是应该为规范类使用公共基类?
- 没有
Establish
这里可以吗? - 我应该使用静态工厂方法(
TestData
方法)来获取测试数据还是应该在规范本身中创建数据? - 而不是测试我可以使用的行为中的每个属性,
result.Equals()
但是我会测试两件事,这不好,对吧?
请随时将示例重构为您认为更好的示例。
[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);
};
}