Будучи новичком в BDD и MSpec, я все еще не уверен в том, что такое лучшие практики и хорошие привычки, связанные с BDD в целом и особенно с MSpec.
Можно ли улучшить следующий пример? Это следует за лучшими методами и хорошими привычками?
- Нормально ли присвоены имена моим спецификационным классам и поведению?
- Должен ли я использовать поведения в этом сценарии или использовать общий базовый класс для классов спецификации?
- Можно ли не иметь здесь
Establish
? 1011 *
- Должен ли я использовать статические фабричные методы (
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);
};
}