testing - 我们应该如何为测试设置复杂的情况?

标签 testing integration-testing

我目前正在从事我称之为集成测试的工作。我想验证如果调用 WCF 服务,它会按照我的预期进行。

让我们来看一个非常简单的场景。假设我们有一个契约(Contract)对象,我们可以搁置或取消搁置。现在编写搁置测试非常简单。您创建一个合约实例并执行将其放在代码上的代码。

当我们要测试起飞等待服务调用时,我的问题就来了。问题是搁置契约(Contract)实际上可能非常复杂,导致各种对象都被修改。所以通常我会使用 Builder 模式并做这样的事情..

var onHoldContract = new ContractBuilder().PutOnHold().Build();

我现在遇到的问题是,我几乎必须复制大部分搁置服务。现在,当我更改“搁置”意味着我必须修改两个地方时。

我立即想到的另一个选择是将暂停服务用作我的测试设置的一部分,但现在我将我的测试与另一段代码的成功结合起来,这是我不知道的喜欢这样做,因为它可能导致一个点的失败破坏其他地方的不相关测试(例如,如果搁置失败)。

我在这里遗漏了任何其他选项吗?或关于哪种方法更可取以及为什么的意见?

最佳答案

Mock 框架是进行单元测试的不错选择。但据我了解,您实际上是在这个阶段进行整合,对吗?因此,您将 WCF 服务称为黑盒(从客户端的角度来看)。我假设当您执行 On Hold 操作时,您必须在存储库(数据库、XML 文件等)上执行一些持久性操作。

在这种情况下,仅在测试端的模拟框架对您没有太大帮助,因为为了测试 Off Hold 操作,您需要一个处于适当状态的 On Hold 对象,包括存储库条目等。似乎我认为无需重新发明轮子即可执行此操作的唯一方法是使用该服务先将其置于暂停状态。但是如果你坚持要分离,那么你将需要设置环境,这意味着代码重复(我实际上不得不在一些集成测试场景中这样做 - 我会做的是在测试开始时设置它运行)。

请注意,您的单元测试将处于较低级别,在服务本身的实现中,您应该尽可能地将它解耦 - 这就是我将应用 Mock 框架的地方。

希望对您有所帮助。

关于testing - 我们应该如何为测试设置复杂的情况?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2405167/

相关文章:

android - 我真的可以在测试中启用和禁用网络访问吗?

php - 需要帮助编写 php 测试文件来测试我的 PHP Controller 类

c++ - 访问堆栈变量比取消引用指针慢?

maven - 使用带有故障安全插件的 Maven 来运行分类测试

python - Selenium:检索向下滚动时加载的数据

android - Android Studio中的Android Instrumentation测试和单元测试之间的区别?

unit-testing - 测试 Spark : how to create a clean environment for each test

ruby - 在 Ruby 中测试应用程序 API 库的最佳方法是什么?

reactjs - 如何使用 create-react-app 正确配置 material-ui 进行测试?

python - 以正确的方式设置 Pyramid 1.5 测试