誰かが私に行くことは不可能だと言うことができます:
[TestCase(new DateTime(2010,7,8), true)]
public void My Test(DateTime startdate, bool expectedResult)
{
...
}
私は本当にそこにdatetime
を入れたいのですが、それが好きではないようです。エラーは次のとおりです。
属性引数は、定数式、typeof式、または属性パラメーター型の配列作成式である必要があります
私が読んだいくつかのドキュメントは、あなたができるべきだと示唆しているようですが、私は例を見つけることができません。
これを行うには、おそらく ValueSource 属性のようなものを使用します
public class TestData
{
public DateTime StartDate{ get; set; }
public bool ExpectedResult{ get; set; }
}
private static TestData[] _testData = new[]{
new TestData(){StartDate= new DateTime(2010,7,8), ExpectedResult= true}};
[Test]
public void TestMethod([ValueSource("_testData")]TestData testData)
{
}
これにより、_testDataコレクションの各エントリに対してTestMethodが実行されます
これは少し遅い回答ですが、うまくいけば価値があります。
TestCase
属性で日付を定数文字列として指定し、メソッドシグネチャでDateTime
としてタイプを指定できます。
NUnitは渡された文字列に対してDateTime.Parse()
を自動的に実行します。
例:
[TestCase("01/20/2012")]
[TestCase("2012-1-20")] //same case as above in ISO format
public void TestDate(DateTime dt)
{
Assert.That(dt, Is.EqualTo(new DateTime(2012,01,20)));
}
別の選択肢は、より冗長なアプローチを使用することです。特に、前もってわからない場合、与えられた文字列入力がどのようなDateTime()
(もしあれば...)を生成するかを知りません。
[TestCase(2015, 2, 23)]
[TestCase(2015, 12, 3)]
public void ShouldCheckSomething(int year, int month, int day)
{
var theDate = new DateTime(year,month,day);
....
}
...注TestCaseは最大3つのパラメーターをサポートしているため、さらに必要な場合は、次のようなものを検討してください。
private readonly object[] testCaseInput =
{
new object[] { 2000, 1, 1, true, "first", true },
new object[] { 2000, 1, 1, false, "second", false }
}
[Test, TestCaseSource("testCaseInput")]
public void Should_check_stuff(int y, int m, int d, bool condition, string theString, bool result)
{
....
}
文書化されているTestCaseDataクラスを使用する必要があります。 http://www.nunit.org/index.php?p=testCaseSource&r=2.5.9
次のような期待される結果を指定することに加えて:
new TestCaseData( 12, 4 ).Returns( 3 );
予想される例外などを指定することもできます。
new TestCaseData( 0, 0 )
.Throws(typeof(DivideByZeroException))
.SetName("DivideByZero")
.SetDescription("An exception is expected");
NUnitはTestCase内の非プリミティブオブジェクトの初期化を許可していないようです。 TestCaseData を使用するのが最適です。
テストデータクラスは次のようになります。
public class DateTimeTestData
{
public static IEnumerable GetDateTimeTestData()
{
// If you want past days.
yield return new TestCaseData(DateTime.Now.AddDays(-1)).Returns(false);
// If you want current time.
yield return new TestCaseData(DateTime.Now).Returns(true);
// If you want future days.
yield return new TestCaseData(DateTime.Now.AddDays(1)).Returns(true);
}
}
テストクラスには、テストデータを指定する TestCaseSource をテストに含める必要があります。
使用方法:TestCaseSource(typeof(class name goes here)、nameof(name of property does here))
[Test, TestCaseSource(typeof(DateTimeTestData), nameof(GetDateTimeTestData))]
public bool GetDateTime_GivenDateTime_ReturnsBoolean()
{
// Arrange - Done in your TestCaseSource
// Act
// Method name goes here.
// Assert
// You just return the result of the method as this test uses ExpectedResult.
}