TimeZoneInfo成员的单元测试的测试结果不正确

时间:2013-12-10 07:27:04

标签: c# .net unit-testing timezone

的信息: 使用.NET 4.0和VS 2012

您好,

我要对我自己的类进行单元测试,该类有一个类型为TimeZoneInfo的成员。但是,当我尝试在我的测试中考虑这个成员时,它总是失败。

以下是验证在实例化过程中_timeZone是否已正确初始化的简化示例:

public class MyClass
{
  public TimeZoneInfo _timeZone;

  public MyClass(string timeZoneId)
  {
    _timeZone = TimeZoneInfo.FindSystemTimeZoneById(timeZoneId);
  }
}

[TestMethod()]
public void MyClassCtorTest()
{
  TimeZoneInfo expected = TimeZoneInfo.FindSystemTimeZoneById("W. Europe Standard Time");
  TimeZoneInfo actual = new MyClass("W. Europe Standard Time")._timeZone;

  Assert.IsTrue(expected.Equals(actual)); //This test passes!

  Assert.AreEqual(expected, actual); //This test fails!
}

我发现Assert.IsTrue(...)通过,而Assert.AreEqual(...)失败: “Assert.AreEqual失败。预计:<(UTC + 01:00)阿姆斯特丹,柏林,伯尔尼,罗马,斯德哥尔摩,维也纳>。实际:<(UTC + 01:00)阿姆斯特丹,柏林,伯尔尼,罗马,斯德哥尔摩,Wien&gt ;.“

由于在TimeZoneInfo类中覆盖了“Equals”,因此我不知道发生了什么。你能帮助我通过第二个断言吗?非常感谢你提前!

罗布

1 个答案:

答案 0 :(得分:5)

您的通过测试呼叫

bool Equals(TimeZoneInfo)

您的失败测试会隐式调用

bool Equals(object)

.NET 4.0 version of TimeZoneInfo中,Equals(object)尚未被覆盖;在.NET 4.5它有。