使用"Ticked method names"时,是否可以参数化NUnit测试用例显示名称?

Mr.*_*Mr. 4 f# nunit

我正在测试F#并使用NUnit作为我的测试库; 我发现使用双后退标记允许任意方法命名使我的方法名称更具人性化.

我想知道,无论是正确还是错误,如果可以在使用NUnit TestCaseAttribute更改方法名称时参数化方法名称,例如:

[<TestCase("1", 1)>]
[<TestCase("2", 2)>]
let ``Should return #expected when "#input" is supplied`` input expected =
    ...
Run Code Online (Sandbox Code Playgroud)

Tom*_*cek 5

这可能不是您所需要的,但如果您想超越单元测试,那么TickSpec(使用F#的BDD框架)有一个很好的功能,它允许您基于包含正则表达式的反向滴答方法编写参数化方案占位符.

例如,在Phil Trelford的博客文章中,他使用它来定义井字游戏场景:

Scenario: Winning positions
    Given a board layout:
        | 1 | 2 | 3 |
        | O | O | X |
        | O |   |   |
        | X |   | X |
    When a player marks X at <row> <col>
    Then X wins

Examples:
    | row    | col    | 
    | middle | right  |
    | middle | middle |
    | bottom | middle |
Run Code Online (Sandbox Code Playgroud)

实现When场景子句的方法在F#中使用如下内容定义:

let [<When>] ``a player marks (X|O) at (top|middle|bottom) (left|middle|right)`` 
        (mark:string,row:Row,col:Col) =       
    let y = int row             
    let x = int col        
    Debug.Assert(System.String.IsNullOrEmpty(layout.[y].[x]))
    layout.[y].[x] <- mark  
Run Code Online (Sandbox Code Playgroud)

这是一个很好的事情,但是如果你只是想编写一个简单的参数化单元测试,它可能是一种过度杀伤 - 如果你想生成不同场景的人类可读规范(实际上有其他人在阅读它们的话),BDD很有用.