gpt4 book ai didi

bdd - 这个 MSpec 测试可以改进吗?

转载 作者:行者123 更新时间:2023-12-01 11:04:47 27 4
gpt4 key购买 nike

作为 BDD 和 MSpec 的初学者,我仍然不太确定与 BDD 相关的最佳实践和良好习惯,尤其是与 MSpec 相关的最佳实践。

下面的例子可以改进吗?它是否遵循最佳实践和良好习惯?

  1. 我的规范类和行为的命名是否正确?
  2. 我应该在这种情况下使用行为还是应该为规范类使用通用基类?
  3. 这里可以不设置 Establish 吗?
  4. 我应该使用静态工厂方法(TestData 方法)获取测试数据还是应该在规范本身中创建数据?
  5. 我可以使用 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);
};
}

最佳答案

这可能不是世界对规范的看法,而是您和您的团队/同行/“必须在您之后阅读此代码的人”可以从中获益。

从一个开发者的角度来看:

  1. 我的大小写和命名遵循代码中可读的内容。 HTML 摘录的好处是您最终会获得可读的规范。我读过的很多内容都集中在所有小写字母等方面;但是,我的措辞与您的非常相似:适当、可读的大小写。

  2. 对于像这样的一对一,行为对于可读性非常好。我使用基类来建立上下文,并为重复的、常见的断言设置期望和行为。

  3. Establish 一直意味着“在我测试之前设置环境”。在你的两个例子中,我可能会像这样重写它:

    Establish context = () => var reader = 
    new DataItemReader(new MemoryStream(
    TestData.GetNormalDataItemAsByteArray()),
    Encryption.None));

    Because of = () => result = reader.ReadItem();

    Cleanup after = () => reader.Dispose();

    由于规范关注的是“读取”的 DataItem,因此操作或 Because 就是这样。同样,偏好问题。

  4. 我使用可重复使用的静态工厂,我在其中手工创建了 stub 或具有 stub /模拟引擎(如 FakeItEasy http://code.google.com/p/fakeiteasy/ )。在我看来, stub 的内容/创建对实际测试影响不大, stub 应该被视为某种程度上的黑盒(这就是我们编写测试的原因,对吧?)。

  5. 我会单独关注每个属性(如您所拥有的那样),以确保它们符合我的期望。如果您曾经覆盖 Equals,您可能会检查不属于规范或不相关的属性的相等性。

我不确定是否存在任何管理“最佳实践”(github 站点上有一些提示:https://github.com/machine/machine.specifications#readme)。通过查看其他使用 MSpec 的项目并观察他们如何处理他们的规范,我发现我的一些编码风格发生了变化。

关于bdd - 这个 MSpec 测试可以改进吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6999746/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com