如何命名和组织测试具有多个参数的方法的单元测试?

Syl*_*ain 5 language-agnostic unit-testing

鉴于此方法必须进行测试:

// Search the given value using the provided search options
// Return true if the searchValue was found; false otherwise 
bool Search(string searchValue, bool useExactSearch, bool useIndexing)
Run Code Online (Sandbox Code Playgroud)

我有6个重要的searchValues(一个带有ponctuation,一个带有重音符号,一个带换行符等),我需要使用useExactSearch和useIndexing的每个可能的组合进行验证.这意味着54个测试用例.

你怎么样的?你真的写了54个单元测试吗?如果是这样,你怎么称呼它们?您是否仅针对最重要的案例编写测试?您是否编写了一个单元测试,它循环遍历一个参数值和预期结果表?如果我进行单个单元测试,则在持续集成报告失败时更难找到哪个案例被破坏.

goe*_*ing 5

如果您使用的是 NUnit (.Net),您可以执行以下操作:

[TestCase("John*",true, false, false)]
[TestCase("*user*",false, true, true)]
[TestCase(".",true, false, true)]
public void SearchTest(string param1, bool param2, bool param3, bool expectedResult)
{
    YourClass clazz = new YourClass();
    bool result = clazz.Search(param1, param2, param3);
    Assert.AreEqual(expectedResult, result);
}
Run Code Online (Sandbox Code Playgroud)

NUnit Test Runner 将执行此操作 3 次。而且,正如您在此处看到的,报告显示了所有分开的测试用例,这可以帮助您识别谁破坏了构建。这可能在大多数 xUnit 框架上都可用。