Sparkyのツールヒント:流暢な主張


私は平均的な開発者より多くのユニットテストを書くのが好きです🥁).
私は本当に簡単に、より楽しくテストを書くためにツールを感謝し、そしてFluent Assertions 私のお気に入りの一つです.

The Microsoft.VisualStudio.TestTools.UnitTesting assert , StringAssertクラスとCollectionAssertクラスは.よろしいでしょう.(私はNunitを使ってからしばらくしていたし、XUnitを使ったことがないので、これらのフレームワークの組み込みアサートについては知りません)
流暢なアサーションはセットです.TDDまたはBDDスタイルの単位テストの期待される結果を文のような構文で指定できるようにするNET拡張メソッド.例えば、"mstest "構文は以下のようになります:
Assert.AreEqual(31, daysInJune);
...として流暢に表現できます:
using FluentAssertions;
. . .
daysInJune.Should().Be(31);
"fluentassertions "名前空間を使用すると、有用な"shold ()"の拡張メソッドが有効になります.

文字列:

  • 期待する
  • benull ()
  • beempty ()
  • がっかりする
  • 終結する
  • 驚異的な
  • 収容する
  • ...
  • 番号

  • 期待する
  • BeGreorororalalto (期待)
  • Belessorequalto (予定)
  • 最小値(最大値)
  • bepositive ()
  • ...
  • datetime :

  • 1月3日(2022年).at ( 22 , 15 )
  • Beonorafter ( 2010年3月( 2010 ))
  • haveday ( 1 )
  • ヘベースト( 3 )
  • Haveyear ( 2010 )
  • 時間( 22 )
  • belessthan ()以前( otherdatetime )
  • ...
  • コレクション

  • HaveCount (期待される)
  • havesemecount (その他のコレクション)
  • 収容する
  • notinclude (予定)
  • onlyinclude ( x => x . predicate )
  • ...
  • これらはほんの数例です.これらと多くの他のタイプのためにさらに多くの方法があります.

    そしてアサーションは可能です!


    string stateName = "OHIO";
    stateName.Should().StartWith("O").And.EndWith("O").And.Contain("HI");
    

    例外


    私はMSテストが嫌いです[ExpectedException(type)] 属性.他の欠点の中では、例外メッセージをテストできません.
    流暢なアサーションでは、例外テストは次のようになります.
    subject.Invoking(x => x.Foo("Hello"))
        .Should().Throw<InvalidOperationException>()
        .WithMessage("Hello is not allowed at this moment");
    
    ...または、「手配/行為/assert」構文で:
    Action action = () => x.Foo("Hello");
    
    action
        .Should().Throw<InvalidOperationException>()
        .WithMessage("Hello is not allowed at this moment");
    

    伸展性


    流暢なアサーションは、あなた自身の“べき”拡張メソッドを書くことができるようにうまくセットアップされます.
    があるmany NuGet packages 追加の拡張メソッドを含むSparkyTestHelpers.Moq.Fluent .

    しかし、待って、もっと!


    流暢なアサーションは、アサーションを書くためのより良い構文を与えるだけではありません.たとえばアサーションが失敗したときには、より良いメッセージを与えます.
    を返します.等しい
    string correctNameSpelling = "Bryan";
    Assert.AreEqual("Brian", correctNameSpelling);
    
    ...失敗メッセージは以下の通りです.
    Assert.AreEqual failed. Expected:<Brian>. Actual:<Bryan>.
    
    流暢な主張で
    string correctNameSpelling = "Bryan";
    correctNameSpelling.Should().Be("Brian");
    
    失敗メッセージは以下の通りです.
    Expected correctNameSpelling to be "Brian", but "Bryan" differs near "yan" (index 2).
    
    “”とは異なりますが、インデックスは、この短い文字列のためのオーバーキルのビットですが、長い文字列にはかなり便利です!
    ( BTW ,これは些細な例ではありません.😏)
    私は流暢なアサーションが大好きです.ネット単体テスト、私はあなたと思う.syld ()は試してみましょう.