6

テストでは、オブジェクトをテストする必要があります:

IEnumerable<int> Ids.

コレクションには、1、2、および 3 の数字が含まれています。

基本的に、Ids に 3 つの ID があり、1、2、3 がすべて存在することをテストしたかったのです。

問題は、IEnumerable にカウントがないことです。

私は行くことができるだろうと思った:

Assert.AreEqual(3, Ids.Count);

これを行う方法と、1、2、3が実際の数字であることを確認する方法を知っている人はいますか?

4

4 に答える 4

9
Assert.IsTrue(Ids.SequenceEqual(Enumerable.Range(1, 3));

3 つの数字があることだけでなく、各要素が の対応する要素と一致することを確認することにより、数字が 1、2、3 の順にあることをテストしEnumerable.Range(1, 3)ます。

編集: Rangehere と Kirill Polishchuk の回答を組み合わせると、次のようになります。

CollectionAssert.AreEqual(Enumerable.Range(1, 3), Ids);

あなたIdsが順序を与えない場合、正しさの最も簡単なテストは、テストでその順序を適用することです。これにより、上記を適用できるようになります。

CollectionAssert.AreEqual(Enumerable.Range(1, 3), Ids.OrderBy(x => x));
于 2012-08-30T01:26:46.820 に答える
6

クラスを見てくださいCollectionAssert。単体テストでコレクションに関連付けられた真/偽の命題を検証します。

于 2012-08-30T01:41:04.250 に答える
6

これらのニーズには、LINQ 拡張メソッドを使用できます。

using System.Linq;

…

Assert.AreEqual(3, Ids.Count());

Assert.IsTrue(Ids.Contains(1));
//etc.

まったく同じアイテムをまったく同じ順序で並べたい場合は、次の方法もあります。

Assert.IsTrue(Ids.SequenceEqual(new List<int>{ 1, 2, 3 }));

のセマンティクスによる順序付けは保証されていIEnumerable<T>ませんが、特定のシナリオでは重要ではない場合があります。

于 2012-08-30T01:22:49.537 に答える
3

FluentAssertionsは素晴らしく、テストを支援する一連の拡張メソッドを提供します。

これは彼らのドキュメントからの抜粋です

IEnumerable collection = new[] { 1, 2, 5, 8 };

collection.Should().NotBeEmpty()
     .And.HaveCount(4)
     .And.ContainInOrder(new[] { 2, 5 })
     .And.ContainItemsAssignableTo<int>();

collection.Should().Equal(new list<int> { 1, 2, 5, 8 });
collection.Should().Equal(1, 2, 5, 8);
collection.Should().BeEquivalent(8, 2, 1, 5);
collection.Should().NotBeEquivalent(8, 2, 3, 5);

collection.Should().HaveCount(c => c > 3).And.OnlyHaveUniqueItems();
collection.Should().HaveSameCount(new[] {6, 2, 0, 5});

collection.Should().BeSubsetOf(new[] { 1, 2, 3, 4, 5, 6, 7, 8, 9, });
collection.Should().Contain(8).And.HaveElementAt(2, 5).And.NotBeSubsetOf(new[] {11, 56});
collection.Should().Contain(x => x > 3); 
collection.Should().Contain(collection, 5, 6); // It should contain the original items, plus 5 and 6.
collection.Should().OnlyContain(x => x < 10);
collection.Should().OnlyContainItemsOfType<int>();
collection.Should().NotContain(82);
collection.Should().NotContainNulls();
collection.Should().NotContain(x => x > 10);

collection = new int[0];
collection.Should().BeEmpty();
于 2012-08-30T09:57:49.243 に答える