datetime을 사용한 Nunit 매개 변수화 된 테스트
누군가 nunit으로 갈 수 없다고 말할 수 있습니까?
[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)));
}
문서화 된대로 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");
또 다른 대안은보다 자세한 접근 방식을 사용하는 것입니다. 특히 내가 반드시 미리 알지 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)
{
....
}
NUnit은 TestCase (s)에서 원시가 아닌 객체의 초기화를 허용하지 않는 것 같습니다. 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);
}
}
In your testing class you'd have the test include a TestCaseSource which directs to your test data.
How to use: TestCaseSource(typeof(class name goes here), nameof(name of property goes 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.
}
참고URL : https://stackoverflow.com/questions/7114604/nunit-parameterized-tests-with-datetime
'IT TIP' 카테고리의 다른 글
Linux 쉘에서 16 진수를 ASCII 문자로 변환하는 방법은 무엇입니까? (0) | 2020.12.13 |
---|---|
Ubuntu에서 X11 / Xlib.h를 찾을 수 없음 (0) | 2020.12.13 |
Chrome 및 Safari 브라우저 (웹킷)를 감지하는 방법 (0) | 2020.12.13 |
Gradle이 두 개의 종속성에 대해 동일한 버전을 설정하도록 강제 할 수 있습니까? (0) | 2020.12.13 |
파이썬 mock을 사용하여 함수 조롱 (0) | 2020.12.12 |