簡體   English   中英

每次測試可以有多個斷言嗎?

[英]Can there be multiple asserts per one test?

我昨天開始關注FsCheck,我正在嘗試編寫一個簡單的測試,任何DiscountAmount實例都會有負值。 我的問題是,在一次測試中有多個斷言是否可以。 例如,我在這里說,創建discountAmount的金額加上折扣金額應為0.但我也說折扣金額應該小於0.這應該是2次測試還是1次?

    public class DiscountAmountTests
    {
        [Property()]
        public void value_or_created_discountAmount_should_be_negative()
        {
            Arb.Register<AmountArbitrary>();
            Prop.ForAll<Amount>(
                v =>
                {
                    var sut = new DiscountAmount(v);
                    var expectedResult = 0;
                    var result = v + sut;

                    result.Should().Be(expectedResult);

                    sut.Value.Should().BeLessThan(0);

                })
                .QuickCheckThrowOnFailure();
        }

        public class AmountArbitrary
        {
            public static Arbitrary<Amount> Amounts()
            {
                return Arb.Generate<decimal>().Where(x => x > 0)
                    .Select(x => new Amount(x))
                    .ToArbitrary();
            }
        }

    }
}

我會說這真的取決於你。 我認為有正面和缺點的論據 - 一方面,有時設置成本昂貴(無論是程序員工作使系統進入特定狀態,還是真正計算資源成本,例如你必須做一個昂貴的查詢到DB或其他東西)然后在我看來,值得進行更細粒度的測試。

權衡的是,如果粗粒度測試失敗,通常不太清楚問題是什么。

與單元測試相比,FsCheck在參數生成方面具有更多的設置成本,並且使FsCheck測試比單元測試更粗糙是有吸引力的。 另請注意,FsCheck有一些方法,如LabelAnd Or在共享參數生成的同時將不同的屬性組合在一起,並且仍然允許您查看測試的哪個部分失敗,稍微偏離了一個缺點。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM