Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/272.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/json/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用JavaScriptSerializer比较两个日期_C#_Json_Nunit - Fatal编程技术网

C# 使用JavaScriptSerializer比较两个日期

C# 使用JavaScriptSerializer比较两个日期,c#,json,nunit,C#,Json,Nunit,在我的单元测试中,使用NUnit,我试图使用 它可以正常工作,但对于DateTime属性,它会引发此错误 String lengths are both 498. Strings differ at index 65. Expected: "...onDateTime":"\\/Date(1410857388258)\\/","TransactionID":"Tra..." But was: "...onDateTime":"\\/Date(1410857388000)\\/","Transa

在我的单元测试中,使用NUnit,我试图使用

它可以正常工作,但对于DateTime属性,它会引发此错误

String lengths are both 498. Strings differ at index 65.
Expected: "...onDateTime":"\\/Date(1410857388258)\\/","TransactionID":"Tra..."
But was:  "...onDateTime":"\\/Date(1410857388000)\\/","TransactionID":"Tra..."
---------------------------------------------^
我使用的代码是

[Test]
public void FromResponseToDecisionResponse_MapsAllProperties()
{
    //Arrange

    var now = DateTime.Now;
    var sourceResponse = CreateSourceResponse(now);
    var targetDecisionResponse = CreateTargetDecisionResponse(now);

    //Act
    var mappedResponse = _mapper.FromResponseToDecisionResponse(sourceResponse);

    //Assert 
    AreEqualByJson(targetDecisionResponse, mappedResponse);
}
存在

在进入AreEqualByJson之前,日期是相同的,但是当它们被序列化时,我得到了这个偏移量,这使得我的测试失败

是否有什么问题,或者我应该在AreEqualByJson中将所有日期视为特殊情况(仍然将其作为可重用方法维护)

谢谢

更新

根据Marc Gravell的评论,我最终在CreateTargetDecisionResponse中这样做了


TransactionDateTime=DateTime.Parse(now.ToString(“yyy-MM-ddThh:MM:sss”))

对象1,
TransactionDateTime=now.ToString(“yyy-MM-ddThh:MM:sss”)
(假设
FromResponseToDecisionResponse
正在将字符串转换回DateTime)

对象2,
TransactionDateTime=now,
如果两者结果相同,那只能是巧合。。i、 e.当<代码>现在<代码>没有任何小数秒时


这是测试中最明显的错误部分。

它们相差258ms;由于您似乎使用的是
yyyy-MM-ddThh:MM:sss
,我不确定这种亚秒级的差异是否会出乎意料……谢谢,@marcgravel。你完全正确。最后我做了一些棘手的事情(见更新),但由于这只是针对这个特定测试的私有方法,我很满意。比较强类型方法和泛型方法会更简洁。如果您不想在测试中引入对某些类的依赖,可以序列化对象(我建议使用Json.Net,因为它的速度大约是Json.Net的3倍),然后(使用JavaScriptSerializer)将它们反序列化到字典中。
[Test]
public void FromResponseToDecisionResponse_MapsAllProperties()
{
    //Arrange

    var now = DateTime.Now;
    var sourceResponse = CreateSourceResponse(now);
    var targetDecisionResponse = CreateTargetDecisionResponse(now);

    //Act
    var mappedResponse = _mapper.FromResponseToDecisionResponse(sourceResponse);

    //Assert 
    AreEqualByJson(targetDecisionResponse, mappedResponse);
}
private static Response CreateSourceResponse(DateTime now)
{
    var sourceResponse = new Response
    {
        //More properties
        TransactionDateTime = now.ToString("yyyy-MM-ddThh:mm:sss")
    };
    return sourceResponse;
}

private static DecisionResponse CreateTargetDecisionResponse(DateTime now)
{
    var targetDecisionResponse = new DecisionResponse
    {
        //Other properties
        TransactionDateTime =  now,
        //More properties
    };
    return targetDecisionResponse;
}