【问题标题】:Good readable testnames in c#c# 中可读性好的测试名称
【发布时间】:2010-08-25 07:38:16
【问题描述】:

我在FsUnit 中读到以下是 F# 中的有效方法/类名:

[<TestFixture>] 
type ``Given a LightBulb that has had its state set to true`` ()=
   let lightBulb = new LightBulb(true)

   [<Test>] member test.
    ``when I ask whether it is On it answers true.`` ()=
       lightBulb.On |> should be True

有没有办法在 c# 中使用这样的方法或类名?

【问题讨论】:

  • 让你思考是否应该在 F# 中制定测试
  • @Frank:真的吗?不知何故,我认为“在标识符中粘贴空白字符的能力”不应该是决定编程语言选择的关键特征。
  • @Brian:能够编写真正人类可读的测试(尤其是客户可读的测试)会对我的语言选择产生很大影响——至少对于定义测试(这就是 Frank指)。并且通过能够混合所有 clr 语言,这不会影响用于实施项目的语言选择。
  • 也许我只是老了或无知,但我认为你们所有“人类可读”的敏捷测试人员都是疯子。 :)
  • @Brain,你被我逗乐了!

标签: c# unit-testing f# naming


【解决方案1】:

不,C# 方法名称中不能有空格或标点符号。你可以这样做:

[TestMethod]
public void When_Asked_Whether_It_Is_On_It_Answers_True() {}

【讨论】:

  • 这是我所期望的。无论如何,我不得不问...必须写下所有这些下划线对我来说并不自然...并且没有下划线的测试名称会提高测试报告的可读性。
  • 有趣的是,您可以在 C# 标识符名称中添加转义字符,因此 cl\u0061ss 是一个有效名称。但是,空格的转义序列无效,因此“When\u0021Asked”不是有效的标识符,这似乎违背了在标识符中允许转义序列的意义。 (诚​​然,这在源代码中看起来仍然很丑陋,但至少在测试运行应用程序中看起来不错)。
  • @Robert - 假设 C# 在这方面类似于 Java,编译器会将转义字符转换为非转义形式。基本上是允许 ASCII 文件处理非 ASCII 标识符。
  • 为什么不让测试报告工具通过用空格替换下划线来显示测试名称?
【解决方案2】:

我喜欢的命名测试的方法根本不包括下划线。

例如,

[Test]
public void SomeMethodShouldCallServiceManagerWithTheCorrectParameters()

话虽如此,一致性是关键。只要您愿意,拥有方法名称就不会受到任何惩罚。所以如果你喜欢用下划线分隔单词,那就去吧。

伊恩

【讨论】:

  • 这样读起来很痛苦,IMO。这比用下划线阅读要难。
【解决方案3】:

照书上说的做:

public void MethodNameUnderTest_CaseExplained_ExpectedResult()

可读性很强

【讨论】:

  • 你指的是哪本书?
【解决方案4】:

实际上,如果您真的希望您的测试中有空格,您可以做一个可怕的 Unicode hack。

吉米博加德解释说:

http://www.lostechies.com/blogs/jimmy_bogard/archive/2009/02/16/spaces-in-identifier-names-in-c.aspx

基本上,使用 UTF-16 0x200E 字符作为空格,使用 AutoHotkey 破解您的键盘,以便您可以在需要时轻松键入该字符。

现在的问题是,你真的想这样做吗?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2012-02-27
    • 2018-06-30
    • 2018-08-22
    • 1970-01-01
    • 2012-03-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多