2012-03-26 6 views
8

私はFluent Assertionsを使って比較しようとしているリストのペアを持っています。私は簡単に比較をコード化することができますが、Fluent Assertionsを使用して、テストに失敗したメッセージに表示される理由を得ることができます。Fluentアサーションで、IEnumerable <string>の文字列を区別しない比較を使用できますか?

これまでに見たことのすべては、大文字と小文字を区別するデフォルトのObject.Equals比較を使用しているようです。私はIComparerをEqualメソッドまたはContainsメソッドに渡すことができないので、他の方法はありますか?

[TestMethod()] 
public void foo() 
{ 
    var actual = new List<string> { "ONE", "TWO", "THREE", "FOUR" }; 
    var expected = new List<string> { "One", "Two", "Three", "Four" }; 

    actual.Should().Equal(expected); 
} 

答えて

1

。その後、あなたは

[TestMethod()] 
public void foo() 
{ 
    var actual = new List<string> { "ONE", "TWO", "THREE", "FOUR" }; 
    var expected = new List<string> { "One", "Two", "Three", "Four" }; 

    actual.Should().Equal(expected, 
    (o1, o2) => string.Compare(o1, o2, StringComparison.InvariantCultureIgnoreCase)) 
} 
のようなもの

を行うことができAのIComparerも可能でしょうが、私はイコール()のデフォルトの動作に時折例外は、追加のカスタム書かれたクラスを保証するものではありませ思います。実際、別のIComparerがテストの意図を覆い隠すかもしれません。皆さんの意見が最善の解決策であるとお伝えしますので、リリース1.8.0のCodeplexに関する問題として追加することができます。一つは、以下を使用することができFluentAssetrionsそれ以降のバージョンの

+0

それは私が望んでいたものとほとんど同じです。以下の回避策の1つを使用して、次のバージョンに注目します。 – Zugbo

+0

http://fluentassertions.codeplex.com/workitem/11925 –

+0

の下でリクエストを追加しました。提案されたソリューションはトランクに実装され、今後のリリース2.0.0の一部になります。 –

0

あなたがIEnumerable<string>のために自分自身を拡張メソッドをwirte(これは私がこのようなものを行う方法です)と私の事、いくつかのユニット-Testframeworks可能性が既にそう(FSUnit私の知る限り)ここで

は簡単な例です(多くのことを改善することができ -

public static AssertEqualSetCaseInsensitive(this IEnumerable<string> actual, IEnumerable<string> expected) 
{ 
    if (actual.Count() != expected.Count()) 
     Assert.Fail("not same number of elements"); 

    if (!actual.All(a => expected.Any(e => e.ToLower() == a.ToLower())) 
     Assert.Fail("not same sets"); 
} 

が同じように使用します)が、それはやるべき

actual.AssertEqualSetCaseInsensitive(expected); 
+1

「私は簡単に比較をコード化できますが、Fluent Assertionsを使用したい」 – bzlm

+0

コードを書く必要がある場合、これはおそらく私がやる方法ですが、誰かが私を見せてくれるでしょう私はまだライブラリで見たことのない方法でした。 – Zugbo

1

エクステンションメソッド(または2つ)を使用して新しいFluentアサーションを追加する方法はありますか?私は、文字列のコレクションに対して利用可能な流暢なアサーションに.EqualInsensitively(...)を追加するコードを書いています。

これを実装するためのコードは、an external pastebinに入れました。少し長めで、MS-PLがCC-Wikiと互換性がない可能性があるからです。

使用このような何か:私たちは、イコール()メソッドにオプションのラムダ式を追加することができます

private static void Main() 
{ 
    var mylist = new List<string> {"abc", "DEF", "GHI"}; 
    mylist.Should().EqualInsensitively(new[] {"AbC", "def", "GHI"}) 
     .And.NotContain(string.Empty); //Emaple of chaining 
} 
+2

ペーストビンのリンク404s –

15

:私が使用バージョンで

// Summary: 
    //  Asserts that a string is exactly the same as another string, including any 
    //  leading or trailing whitespace, with the exception of the casing. 

ワークス(FluentAssertions.2.2.0.0):[メタデータ]から

stringValue.Should().BeEquivalentTo(stringToCompare); 

概要。

関連する問題