gpt4 book ai didi

c# - 几种方法的 BDD 命名

转载 作者:太空狗 更新时间:2023-10-29 17:57:56 26 4
gpt4 key购买 nike

当您正在测试的类中只有一种方法时,BDD 命名方法非常有效。假设我们有一个具有 Connect 方法的连接器类:

Should_change_status_to_Connected_if_Disconnected

很漂亮吧?但是当一个类中有多个方法时我不得不命名测试时我感到很困惑(假设我们向类中添加了 Disconnect 方法)。

我看到了两种可能的解决方案。第一个是添加带有方法名称的前缀,例如:

Should_change_status_to_Connected_if_Disconnected_when_Connect_was_called

另一种方法是为您正在测试的每个方法引入嵌套测试类。

public class ConnectorTests
{
public class ConnectTests
{
public void Should_change_status_to_Connected_if_Disconnected()
{
...
}
}

public class DisconnectTests
{
public void Should_change_status_to_Disconnected_if_Connected()
{
...
}
}
}

老实说,这两种方法都感觉有点不对劲(可能只是因为我不习惯)。推荐的方法是什么?

最佳答案

我使用不同的命名风格编写了剂量检测。从本质上讲,这种测试方法由于名称过长而难以阅读,它们超出了每行符号的限制,通常带有下划线的方法名称违反了命名约定。当您想向 BDD 场景添加“和”条件或先决条件时,困难就开始了,例如“当连接器初始化时,如果断开连接并且网络可用并且参数 1 是...并且参数 2 是...,则应将状态更改为已连接”。因此,您必须将测试用例分组到许多类、子文件夹等中。这会增加开发和支持时间。

C# 中的替代方法是编写测试,例如使用 JavaScript 测试框架:Jasmine、Jest 等。对于类和方法的单元测试,我会使用 Arrange/Act/Assert 样式,而 BDD 样式用于功能/故事场景,但是两种风格都可以使用。在 C# 中,我使用我的 Heleonix.Testing.NUnit以 AAA 或 BDD (GWT) 样式库和编写测试:

using NUnit.Framework;
using Heleonix.Testing.NUnit.Aaa;
using static Heleonix.Testing.NUnit.Aaa.AaaSpec;

[ComponentTest(Type = typeof(Connector))]
public static class ConnectorTests
{
[MemberTest(Name = nameof(Connector.Connect))]
public static void Connect()
{
Connector connector = null;

Arrange(() =>
{
connector = new Connector();
});

When("the Connect is called", () =>
{
Act(() =>
{
connector.Connect(options);
});

And("the Connector is disconnected", () =>
{
Arrange(() =>
{
connector.Disconnect();
});
});

Should("change the status to Disconnected", () =>
{
Assert.That(connector.Disconnected, Is.True);
});
});
}
}

对我来说重要的是,几个月后我可以打开这样的测试并清楚地记忆起那里写的是什么,而不是花几个小时来理解它测试了什么/如何测试。

关于c# - 几种方法的 BDD 命名,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42131915/

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