2013-01-17 29 views
-1

我是MVC3的新手,对单元测试部分不熟悉。我一直试图通过接受3整数值来构造具有异常处理功能的日期时间,但是它没有通过单元测试。林不知道我做的是否正确。从MVC3中的3个整数构造日期时间

这是控制器部分:

public DateTime MakeDate(string dateString) 
    { 
    DateTime myDate; 
     if (DateTime.TryParseExact(dateString, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out myDate)) 
     { 
      return myDate; 
     } 
     return new DateTime(); 
    } 

这是单元测试:

[TestMethod] 
public void MakeDateConstructsADateTimeFromYearMonthAndDay() 
{ 
    //Arrange 
    var controller = new DateController(); 
    var expected = new DateTime(2014, 6, 30); 

    //Act 
    var result = controller.MakeDate(2014, 6, 30); 

    //Assert 
    Assert.AreEqual<DateTime>(expected, result); 
} 

[TestMethod] 
public void MakeDateReturnsDefaultDateTimeIfInputDataInvalid() 
{ 
    var controller = new DateController(); 
    var expected = new DateTime(); 

    //Act 
    //June has only 30 days so this will cause an exception 
    var result = controller.MakeDate(2014, 6, 31); 

    //Assert 
    Assert.AreEqual<DateTime>(expected, result); 
} 

在此先感谢

+1

** **如何失败?你会得到什么错误? – SLaks

+0

错误:方法“Makedate”没有超载需要3个参数 –

+0

您错误地为'DateTime'构造函数设置了'MakeDate'函数。你的函数只有一个参数,它是一个'DateTime'。所以可以这样调用:'controller.MakeDate(new DateTime(2014,6,30));' 如果你想传递一个'string',把'dr'类型改成'string'并且调用它这:'controller.MakeDate(“2014-06-30”);' –

回答

0
string date = "2014-06-30"; 
DateTime datetime = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture); 

date字符串格式的不是你在ParseExact中使用。当您应该使用yyyy-MM-dd时,您正在使用yyyyMMdd

代码失败,因为字符串与格式不匹配。

0

试着改变你的MakeDate功能是这样的:

DateTime myDate; 
if (DateTime.TryParseExact(dateString, "yyyy-MM-dd", new CultureInfo("en-US"), DateTimeStyles.None, out myDate)) 
{ 
    return myDate; 
} 
return new DateTime(); 

此外,您MakeDate功能不使用dr参数,以及要在格式yyyy-MM-dd指定日期和使用ParseExact以不同的格式(yyyyMMdd )。

+0

是否在“MakeDate”方法中将“dateString”作为字符串参数传递? –

+0

是的。将您的'dr'参数更改为字符串。该函数将是:'公共DateTime MakeDate(字符串日期字符串){...}' –

+0

即使我改变它仍然显示测试类错误。错误是“方法MakeDate需要3个参数没有重载” –