-1

私は MVC3 が初めてで、単体テストの部分に慣れていません。3 つの整数値を受け入れる例外処理を使用して Datetime を構築しようとしましたが、単体テストに失敗しました。私はそれを正しく行っているかどうかわかりません。

これはコントローラー部分です:

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);
 }

前もって感謝します

4

2 に答える 2

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使用せず、形式で日付を指定し、別の形式で使用します()。dryyyy-MM-ddParseExactyyyyMMdd

于 2013-01-17T14:36:09.953 に答える
0
string date = "2014-06-30";
DateTime datetime = DateTime.ParseExact(date, "yyyyMMdd", CultureInfo.InvariantCulture);

date文字列は で使用する形式ではありませんParseExact

を使用yyyyMMddすべきときに使用していyyyy-MM-ddます。

文字列が形式と一致しないため、コードは失敗します。

于 2013-01-17T14:17:25.707 に答える