gpt4 book ai didi

c# - 邪恶的 JUnit 日期技巧 - 你将如何在 C# 中执行此操作?

转载 作者:行者123 更新时间:2023-11-30 21:18:59 24 4
gpt4 key购买 nike

Gojko Adzic 今天在他的博客上发布了关于 Steve Freeman 的单元测试技巧,这有助于清楚地说明为什么单元测试中的日期比较失败。 Here is the blog post describing the trick - it is not long .

技巧的关键部分是这个方法(在 Java 中),它在 Date 类的特定实例上覆盖 ToString()

private Date namedDate(final String name, final Date date) {
return new Date(date.getTime()){
@Override
public String toString() {
return name;
}
};
}

似乎此方法使用了 Java 语言的一种功能,但在 C#(或至少我所知道的一种)中没有匹配项。如果您能告诉我如何在 C# 中执行相同的技巧,那就太棒了。

最佳答案

这在 Java 中称为匿名类。它实际上只是一个没有名称的类实现,它覆盖了 ToString()

能够在 C# 中使用普通的命名类 - 唯一的问题是 DateTime 是 C# 中的一个结构,因此您不能从它继承。

C# 确实有匿名类型,但与 Java 的方式不同。在 C# 中,您可以拥有一个匿名类型并指定它的属性,但您不能指定任何方法实现。因此,C# 和 Java 中的匿名类型往往用于不同的事物。

编辑

这是一个关于如何在 C# 中执行此操作的示例,但如上所述,您不能在 C# 中对 DateTime(或其他 struct 或密封类)执行此操作。所以为了这个例子;我正在使用一个名为 Token 的虚构类,它有一个字符串属性“Value”:

private Token GetNamedToken(Token t, string name)
{
return new NamedToken {Value = t.Value, Name = name};
}

private class NamedToken : Token
{
public string Name { get; set; }
public override string ToString()
{
return Name;
}
}

关于c# - 邪恶的 JUnit 日期技巧 - 你将如何在 C# 中执行此操作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3990683/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com