gpt4 book ai didi

c# - BDD 和微服务

转载 作者:太空狗 更新时间:2023-10-29 18:21:53 26 4
gpt4 key购买 nike

我们的解决方案依赖于微服务。另一方面,我们的 CIO 希望我们在每一个新特性上实践行为驱动开发。

是否可以在微服务架构中管理 BDD?根据您的经验,针对这种架构采用 BDD 是一种好的做法,还是您认为我们应该直接查看集成测试?

[编辑]

更准确地说,在我看来,BDD 测试应该验证业务逻辑,而且只验证业务逻辑。在许多框架中,BDD 测试场景是由 skateholders 使用 DSL 创建的。 BDD 测试倾向于收敛于独有的“基础设施无知”实践。另一方面,集成测试应该验证解决方案是否匹配目标基础架构(它们由 DevOps 完成?),并且仅匹配基础架构。当业务功能“分布”在微服务上时,您应该模拟 BDD 测试环境(应该是本地环境)中的几乎所有内容(基础设施和业务),并且模拟业务会大大削弱您的目标。您认为这些做法兼容吗?

最佳答案

为什么您认为 BDD 和集成测试不同?

BDD 只是意味着通过期望的行为来驱动您的设计,通常通过一组验收测试来表达。

这些测试可能是涉及许多[微]服务的“集成测试”,或者它们可能是指定单个服务或该服务中单个类的所需行为的测试。理想情况下,将在所有这些级别进行混合测试。重要的是您指定所需的行为并使用它来插入开发。

在某种程度上,您的系统如何实现是无关紧要的,只要它表现出预期的行为即可。对于将系统视为黑盒的高级测试,这是正确的,并且你越往下走,越接近实际代码,这就变得不那么正确(因为你正在有效地测试此时的实现)。

因此,我会专注于新功能的预期行为,并首先为这些验收测试编写规范,然后实现您的服务以满足所需的行为,以务实的方式根据需要添加较低级别的测试,同时牢记测试级别越低,它们就越有可能变得脆弱,并且需要在您更改实现时进行更改。

编辑

根据您的问题进行编辑。

我不同意 BDD 测试应该只测试业务逻辑。事实上,BDD 测试通常更侧重于测试整个系统,将所有部分集成在一起。话虽如此,BDD 只是一种通过指定所需行为的测试方式,并且可以应用于应用程序的任何级别。您可以通过使用 Gherkin 语法指定行为来测试单个类,我们有时会这样做。我们还指定了使用 Gherkin 的整个系统的预期行为以及我们服务的预期行为。根据我们的目标级别,这些测试的格式自然会略有不同。

对于系统测试,我们可能有这样的规范:

Scenario: user can perform action A
Given I am a user with access to some feature A
And feature A is enabled for the user
When I call perform action A with parameters 'Bob' and 'John'
Then A 'BobJohn' is created
And notifications are sent to the current user

对于个别服务,我们可能会进行如下测试

Scenario: create messages are handled correctly
Given the service is set up
When a message arrives to create a 'BobJohn'
Then a new entry is added to the database with the key 'BobJohn'
And an outgoing notification message for 'BobJohn' is created

对于个别类(class),我们可能会进行如下测试

Scenario: Notifier class should send notifications via all users preferred means
Given the current user wants notification by Twitter
And the current user who wants notification by email
When I send the notification 'BobJohn' to the current user
Then the twitter notifier should be invoked with 'BobJohn'
And the email notifier should be invoked with 'BobJohn'

这些都是 BDD 风格的测试,但它们测试系统的不同方面。

关于c# - BDD 和微服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30621628/

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