测试您只知道其功能的应用程序的最佳方法
Best way of testing an application which you only know its functionality
我收到了一个未经测试的软件应用程序,我将对其进行重构。
客户向我展示了该应用程序应该如何工作,我已经写下了所有步骤。
该应用程序非常混乱:名称与代码的实际建议无关,有未使用的功能和很长等。我将完全重构它,但在此之前我想创建一些测试,所以我不不要破坏整个系统。我将更改创建对象的步骤,因为我认为它对用户不友好。
我想知道在这种情况下最好的测试方法是什么。
因为我只知道用户行为的影响,所以我认为功能测试或集成测试是最好的方法,因为这是我拥有的信息。另一方面,由于我要更改 UI,我想我需要针对数据库进行测试,而这不是功能测试应该做的。
在浏览器上重现场景然后检查数据库状态是否符合我的预期是否是个好主意?
提前致谢
理想的方法是您应该为代码的特定部分编写测试,然后重构它。这样,作为奖励,您将更好地理解代码。但我在现实中看到的是,通常遗留代码是如此混乱,以至于它不完全是 testable
。大多数时候,代码的耦合度如此之高,以至于单元测试变成了一场噩梦。如果是这种情况,我认为最好的方法是编写非常高级的黑盒集成测试,这样即使在重构代码后这些测试仍然有效。
如果编写测试工作量太大,仅通过理解原始功能为新代码编写测试也不会太糟糕,因为我们重构代码使其可测试,我们需要有可测试的代码重构使我们陷入恶性循环。
是的,您绝对可以编写与数据库交互的测试。只要测试是精细的,就不必太在意 "Unit Tests" 的定义。我个人尽量避免嘲笑。 Classical vs London School TDD
我收到了一个未经测试的软件应用程序,我将对其进行重构。 客户向我展示了该应用程序应该如何工作,我已经写下了所有步骤。 该应用程序非常混乱:名称与代码的实际建议无关,有未使用的功能和很长等。我将完全重构它,但在此之前我想创建一些测试,所以我不不要破坏整个系统。我将更改创建对象的步骤,因为我认为它对用户不友好。
我想知道在这种情况下最好的测试方法是什么。 因为我只知道用户行为的影响,所以我认为功能测试或集成测试是最好的方法,因为这是我拥有的信息。另一方面,由于我要更改 UI,我想我需要针对数据库进行测试,而这不是功能测试应该做的。
在浏览器上重现场景然后检查数据库状态是否符合我的预期是否是个好主意?
提前致谢
理想的方法是您应该为代码的特定部分编写测试,然后重构它。这样,作为奖励,您将更好地理解代码。但我在现实中看到的是,通常遗留代码是如此混乱,以至于它不完全是 testable
。大多数时候,代码的耦合度如此之高,以至于单元测试变成了一场噩梦。如果是这种情况,我认为最好的方法是编写非常高级的黑盒集成测试,这样即使在重构代码后这些测试仍然有效。
如果编写测试工作量太大,仅通过理解原始功能为新代码编写测试也不会太糟糕,因为我们重构代码使其可测试,我们需要有可测试的代码重构使我们陷入恶性循环。
是的,您绝对可以编写与数据库交互的测试。只要测试是精细的,就不必太在意 "Unit Tests" 的定义。我个人尽量避免嘲笑。 Classical vs London School TDD