【问题标题】:Incorrect test result for unit test of TimeZoneInfo memberTimeZoneInfo 成员单元测试的测试结果不正确
【发布时间】:2013-12-10 07:27:04
【问题描述】:

信息: 使用 .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 失败。预期:。实际:。”

由于 TimeZoneInfo 类中的“Equals”被覆盖,我不明白这里发生了什么。你能帮我通过第二个断言吗?非常感谢您!

罗伯

【问题讨论】:

    标签: c# .net unit-testing timezone


    【解决方案1】:

    您通过的测试调用

    bool Equals(TimeZoneInfo)
    

    你失败的测试隐式调用

    bool Equals(object)
    

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

    【讨论】:

    • 嗨 Jon,我正在使用 .NET 4.0,如我的消息顶部所述。 ;-) 哦,该死的!你完全正确!我刚刚发现在 .net 4.5 中“Equals”被覆盖了;但是,在 .net 4.0 中却不是!哇!!非常感谢!
    • @macrobbsen:查看文档,它可能在 full 框架版本的 .NET 4.0 中被覆盖,但不是客户端配置文件。
    • @macrobbsen:糟糕,阅读了错误的文档 - 4.5 文档有点误导,因为 4.5 文档谈到了在 client profile 中继承的 Equals(object)但没有提到非客户资料。
    • @macrobbsen 另外,如果你使用 NUnit 或 XUnit 测试,它会通过,因为它们有类型安全的断言。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-19
    • 1970-01-01
    • 2022-11-28
    • 1970-01-01
    • 2020-06-27
    • 2012-03-02
    相关资源
    最近更新 更多