c# - TDD 中的命名测试与单元测试命名

标签 c# unit-testing tdd nunit bdd

我一直在做一些使用 TDD 进行开发的测试;即先写我的测试。

我一直习惯这样写测试,使用这种命名约定。

  MethodName_DoesWhat_WhenTheseConditions

这些对于单元测试非常有用,因为我知道方法名称是什么,但是在进行 TDD 时我不知道方法名称。例如,我有一个用户故事说明

    "As a user, I can return the total number of records in the database"

现在只要看看这个,我马上就知道我会有很多方法和层。

但我现在不知道 TDD 中这些方法的名称,那么尝试在测试名称前加上前缀是否有意义?这里有人有什么建议吗?

此外,一旦我编写了我的测试和我的方法/类并且一切正常,是否有必要创建额外的“单元测试”来测试类中我没有通过 TDD 的东西?

最佳答案

通过遵循“由外向内”的开发方法,您会在开发过程中发现/改进您的 TDD 单元测试名称(另请参阅此答案 here)

例如,以您的用户故事为例(我稍作修改):

As a user
I want to know the total number of records in the database
So that I can report back to the business owner

在开发这个故事时,您会将其分解为多个场景,例如

Given a user logs in
When they request the total number of records
Then they should be presented with the result

在这个阶段,您仍然不知道需要什么单元测试。但是,如果使用“由外向内”开发方法,您现在将恢复使用 TDD 技术来实现必要的功能。

例如,接下来您将使用常规的 TDD 方法实现登录功能。因此,您可能有一个名为的测试方法:

WhenSubmitValidCredentials_ShouldBeAuthorised

您还可以使用这种方法“伪造它直到成功”,即您可以模拟某些依赖项(例如授权机制),以便您可以专注于实现场景的关键功能。

因此,按照这种方法,您将逐步开发用户故事所需的所有功能,同时创建准确的单元测试以满足场景。

关于c# - TDD 中的命名测试与单元测试命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24519282/

相关文章:

c# - 是否有一个 Form 事件在将任何内容绘制到屏幕上之前被调用?

javascript - 使用 Jest 测试 React Native 时如何模拟 LayoutAnimation

javascript - Angular 如何测试需要位置的组件

sql - 为什么来自 Red Gate SQL Test 的第一个 tSQLt 样本测试在我的系统上失败了?

c# - 函数返回路径

c# - 列出 DataTable 值

c# - string.Contains 作为谓词而不是函数调用?

c# - 保留共享资源(例如 json 文件)可用于具有完整路径的测试

javascript - 如何使用 Grunt 和 Mocha 按 mtime 顺序运行单元测试

c# - 比较某些 Prop 具有不同格式的对象