Nunit使用datetime进行参数化testing
有人可以告诉我是不是可以与nunit去:
[TestCase(new DateTime(2010,7,8), true)] public void My Test(DateTime startdate, bool expectedResult) { ... }
我真的想把一个datetime
放在那里,但它似乎并不喜欢它。 错误是:
属性参数必须是常量expression式,typeofexpression式或属性参数types的数组创buildexpression式
我读的一些文件似乎build议你应该能够但我找不到任何例子。
我可能会使用像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
属性中将date指定为常量string,然后在方法签名中将types指定为DateTime
。
NUnit会自动对传入的string做一个DateTime.Parse()
。
例:
[TestCase("01/20/2012")] public void TestDate(DateTime dt) { Assert.That(dt, Is.EqualTo(new DateTime(2012,01,20))); }
您应该按照logging使用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");
另一种select是使用更详细的方法。 特别是如果我不一定知道前面什么样的DateTime()
(如果有的话)给定的stringinput产量。
[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中的非原始对象。 最好使用TestCaseData 。
您的testing数据类将如下所示:
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); } }
在你的testing类中,你会有testing包含一个TestCaseSource ,它指向你的testing数据。
如何使用:TestCaseSource(typeof(类名称在这里),nameof(属性名称在这里))
[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. }
- 确定代码是否作为unit testing的一部分运行
- WatiN System.IO.FileNotFoundException Interop.SHDocVw
- 如何诊断“TestFixtureSetUp失败”
- 我怎样才能并行运行NUnittesting?
- unit testing,NUnit还是Visual Studio?
- unit testingHttpContext.Current.Cache或C#中的其他服务器端方法?
- NUnitunit testing在安装了testing适配器的testing资源pipe理器中不显示
- 在NUnittesting中使用WPF组件 – 如何使用STA?
- 如何在STAThread模式下运行unit testing?