2016-07-11 6 views
1

私は、テストメソッドを持っています属性値として配列を渡し

An attribute argument must be a constant expression, typeof expression or array creation expression of an attribute parameter type.

はおそらく、コンパイラが区別can't:

[TestCase(new string[] { "1", "2", "5" }, Result = true)] 
bool AllocateIDsTest1(IEnumerable<string> expected) 
{ 
    var target = ... 
    var actual = target.AllocateIDs(expected); 

    return actual.SequenceEqual(expected); 
} 

は、しかし、私はコンパイラエラーを取得します次のコンストラクタ:

TestCase(params object[] args, Named Parameters); 

params object[]objectの両方に解決できるため、
TestCase(object ob1, Named Paramaters); 

があります。

投稿者this post私は、文字列配列がコンパイル定数として渡せることがわかっています。

TestCaseに文字列の配列を提供するにはどうすればよいですか?

[TestCase("1", "2", "5", Result = true)] 
public bool AllocateIDsTest1(params string[] expected) 
{ 
    var target = ... 
    var actual = target.AllocateIDs(expected); 

    return actual.SequenceEqual(expected); 
} 

答えて

3

は私がのparams-アプローチを使用して解決策を見つけました。別のオプションは、TestCaseSourceを使用することです。ドキュメントを参照してください。
+0

優秀な回避策: –

+0

回避策でもありません。 :-)これは、TestCaseの使用方法です。コンパイラのエラーは配列に渡されたためではありません。これは明示的に属性に許可されています。これは、属性コンストラクタにnewを使用して動的に配列を作成するよう依頼するためです。 C#はそれを許可しません。 – Charlie

+0

@Charlie「属性に明示的に許されている」と言うと、アトリビュートにアレーを割り当てるのはどうしたらよいでしょうか?静的フィールドを介して? – HimBromBeere

関連する問題