gpt4 book ai didi

unit-testing - DSL生成测试数据

转载 作者:行者123 更新时间:2023-12-04 04:20:21 26 4
gpt4 key购买 nike

有多种方法可以为测试(不仅仅是单元测试)生成数据,例如 Object Mother、builders 等。 另一种有用的方法是将测试数据编写为纯文本:

product: Main; prices: 145, 255; Expire: 10-Apr-2011; qty: 2; includes: Sub
product: Sub; prices: 145, 255; Expire: 10-Apr-2011; qty: 2


然后将其解析为 C# 对象。这在单元测试中很容易使用(因为可以用单行编写深层内部集合),这在类似 FitNesse 的系统中使用起来更加方便(因为这个 DSL 自然适合 wiki),等等。

所以我就用这个写解析器,但是每次都写起来很乏味。我不是 DSL/语言解析器的大专家,但我认为他们可以在这里提供帮助。什么是正确的使用?我只听说过:
  • DSL(我的意思是任何 DSL)
  • Boo(我认为可以做 DSL)
  • ANTLR

  • 但我什至不知道该选择哪一个以及从哪里开始。

    所以问题是:使用某种 DSL 来生成测试数据是否合理?你会建议这样做吗?有没有现成的案例?

    更新:好像我还不够清楚。这与原始字符串到对象的转换无关。查看第一行并将其与
    var main = Product.New("Main")
    .AddPrice(Price.New(145).WithType(PriceType.Main).AndQty(2))
    .AddPrice(Price.New(255).WithType(PriceType.Maintenance).AndQty(2))
    .Expiration(new DateTime(10, 04, 2011));
    var sub = Product
    .New("Sub").Parent(main)
    .AddPrice(...));
    main.AddSubProduct(sub);
    products.Add(main);
    products.Add(sub);

    请注意,我首先创建子产品,然后将其添加到主产品,即使它以相反的顺序列出。价格以特殊方式处理。我想指定子产品的名称并获得对它的引用 - 创建。我想在单行上列出所有产品属性 - FLAT 和 NON-REPEATATIVE。我想对属性使用默认值。等等。

    更新:我不相信要避免使用 DSL,因为所有替代示例都过于冗长且对用户不友好。没有人说任何关于 DSL 的有用信息。

    最佳答案

    对于数据 DSL YAML是一个优秀的候选人。以下是维基百科的示例:

    ---
    receipt: Oz-Ware Purchase Invoice
    date: 2007-08-06
    customer:
    given: Dorothy
    family: Gale

    items:
    - part_no: A4786
    descrip: Water Bucket (Filled)
    price: 1.47
    quantity: 4

    - part_no: E1628
    descrip: High Heeled "Ruby" Slippers
    price: 100.27
    quantity: 1

    bill-to: &id001
    street: |
    123 Tornado Alley
    Suite 16
    city: East Westville
    state: KS

    ship-to: *id001

    specialDelivery: >
    Follow the Yellow Brick
    Road to the Emerald City.
    Pay no attention to the
    man behind the curtain.

    我在几个项目中使用了 YAML 并对此感到满意。

    然而,如果我们谈论的是单元测试,“手动”构造必要的对象通常更简单,更易读,并带有构造函数和属性分配。这是因为单元测试本质上高度关注某些代码(单元),并且创建足以进行测试的数据基础架构应该不难。在单元测试中对半完整实体进行操作是可以的,不要费心构建与这个具体测试无关的数据。

    对于功能测试,YAML 很棒。

    关于unit-testing - DSL生成测试数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2629255/

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